首页 > 解决方案 > 如何在熊猫中划分一组连续的两行

问题描述

我有以下数据框

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 和年份分组。然后,我想得到每年价值之间差异的百分比。

我可以得到每年之间的差异

df["difprev"]= df.sort_values(by=['id','year']).groupby(['id']).value.diff()

但我不知道如何将每个差异“diffprev”划分为前一个差异,以获得(de)增加的年百分比,因为我找不到类似于 diff() 的 groupby 函数

你能帮助我吗?谢谢

标签: pythonpandasdivide

解决方案


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

推荐阅读