Python 如何在一组熊猫中划分两个连续的行

Python 如何在一组熊猫中划分两个连续的行,python,pandas,divide,Python,Pandas,Divide,我有以下数据框 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.Da

我有以下数据框

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()
但我不知道如何将前一个差异除以“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

输出:

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
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