[英]How to divide two consecutive rows in a group in pandas
我有以下數據框
d = {'id': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5,], 'value': [21, 44, 51, 10, 30, 7, 15, 51, 24, 122, 36, 41, 15, 12, 35, ], 'year': [2007, 2007, 2007, 2007, 2007, 2009, 2009, 2009, 2009, 2009, 2008, 2008, 2008, 2008, 2008]}
df = pd.DataFrame(d, columns = ['id','value','year'])
我想按ID和Year分組。 然后,我想獲得每年的價值之間的差異百分比。
我可以得到每年之間的差異
df["difprev"]= df.sort_values(by=['id','year']).groupby(['id']).value.diff()
但是我不知道如何將每個差異“ difprev”除以上一個,以得到每年的百分比(de)增加,因為我找不到與diff()類似的groupby函數
你能幫助我嗎? 謝謝
df = df.sort_values(by=['id','year'])
df['percdif']=df.difprev / df.value.shift() * 100
結果:
id value year difprev percdif
0 1 21 2007 NaN NaN
10 1 36 2008 15.0 71.428571
5 1 7 2009 -29.0 -80.555556
1 2 44 2007 NaN NaN
11 2 41 2008 -3.0 -6.818182
6 2 15 2009 -26.0 -63.414634
2 3 51 2007 NaN NaN
12 3 15 2008 -36.0 -70.588235
7 3 51 2009 36.0 240.000000
3 4 10 2007 NaN NaN
13 4 12 2008 2.0 20.000000
8 4 24 2009 12.0 100.000000
4 5 30 2007 NaN NaN
14 5 35 2008 5.0 16.666667
9 5 122 2009 87.0 248.571429
參見https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.rolling.html
grouped = df.sort_values(by=['id','year']).groupby(['id'])
grouped.value.rolling(2).apply(lambda x: (x[1]-x[0])/x[0])
輸出:
id
1 0 NaN
10 0.714286
5 -0.805556
2 1 NaN
11 -0.068182
6 -0.634146
3 2 NaN
12 -0.705882
7 2.400000
4 3 NaN
13 0.200000
8 1.000000
5 4 NaN
14 0.166667
9 2.485714
Name: value, dtype: float64
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.