如何通过特定变量在 pandas 数据帧组中的行之间进行计算?

How do I do calculation between rows in pandas dataframe group by certain variable?

我有一个这样的数据框:

Time      Name     Value
2007Q1    A        30
2007Q2    A        35
2007Q3    A        28
...
2007Q1    B        31
2007Q2    B        50
2007Q3    B        60
...
2007Q1    C        20
2007Q2    C        15
2007Q3    C        30

我想添加另一个名为“结果”的列,并在每个名称的每一行之间执行计算。我想使用一个季度的值除以上一季度的值,然后减去 1,这类似于 Value(Q2)/Value(Q1)-1。另外,我想按名称分组,只在具有相同名称的行内进行计算。结果应该是这样的:

Time      Name     Value    Results
2007Q1    A        30       
2007Q2    A        35       0.1667
2007Q3    A        28       -0.2
...
2007Q1    B        31       
2007Q2    B        50       0.6129
2007Q3    B        60       0.2
...
2007Q1    C        20
2007Q2    C        15       -0.25
2007Q3    C        30       1

每个 'Name' 的开始时间段应该没有结果值。

感谢所有能提供帮助的人!

DataFrame.groupby on Name and use groupby.shift to shift the column Value then use Series.div to divide it with Value, finally use Series.sub减去1:

df['Results'] = df['Value'].div(df.groupby('Name')['Value'].shift()).sub(1)

结果:

print(df)
     Time Name  Value   Results
0  2007Q1    A     30       NaN
1  2007Q2    A     35  0.166667
2  2007Q3    A     28 -0.200000
3  2007Q1    B     31       NaN
4  2007Q2    B     50  0.612903
5  2007Q3    B     60  0.200000
6  2007Q1    C     20       NaN
7  2007Q2    C     15 -0.250000
8  2007Q3    C     30  1.000000