さまざまなタイプのさまざまなオプションのアカウントのグループがあり、2014年と2015年に使用された平均金額と比較した2016年の各ユーザーの毎月の節約額を計算しようとしています。私のDataFrameは次のようになります。
key amount id month opt type year
0 100 5 1 M E 2014
1 200 5 1 M G 2014
2 300 5 1 R E 2014
3 400 5 1 R G 2014
4 105 5 1 M E 2015
5 205 5 1 M G 2015
6 305 5 1 R G 2015
7 405 5 1 R E 2015
8 90 5 1 M E 2016
9 180 5 1 M G 2016
10 310 5 1 R G 2016
11 350 5 1 R E 2016
上記に基づいて、ユーザー「5」は、2015年と2016年の平均「amt」102.5と比較して、オプション「M」を使用した「タイプ」「E」の2016年1月に12.5を節約したと予想します。
2016年の1か月目に、さまざまなタイプに期待する完全な回答は次のとおりです。
M|E -12.5
M|G -22.5
R|E -2.5
R|G -42.5
groupby()関数がこれで機能するかもしれないと思いましたが、私が開発した式では正しい答えが得られません。
df_savings = df.groupby(['id','year','month','type','opt'], group_keys=False).apply(
lambda s: float(s['amount'][s.year < 2016].sum()/float(2)) - float(s['amount'][s.year == 2016].sum()))
どんな助けでも大歓迎です。上記のサンプルdfに使用されるコードは次のとおりです。
df = pd.DataFrame({'id':[5,5,5,5,5,5,5,5,5,5,5,5],
'type':['E','G','E','G','E','G','G','E','E','G','G','E'],
'opt':['M','M','R','R','M','M','R','R','M','M','R','R'],
'year':[2014,2014,2014,2014,2015,2015,2015,2015,2016,2016,2016,2016],
'month':[1,1,1,1,1,1,1,1,1,1,1,1],
'amount':[100,200,300,400,105,205,305,405,90,180,310,350]
})
2016と2014-15の2つの部分に分割してから、groupbyを実行すると、2つの同様のデータフレームを減算できます。
df[df.year == 2016].groupby(['id', 'month', 'opt', 'type'])['amount'].sum() - df[df.year < 2016].groupby(['id', 'month', 'opt', 'type'])['amount'].mean()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加