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

时间:2020-07-24 17:34:48

标签: python pandas dataframe row calculation

我有一个这样的数据框:

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

每个“名称”的开始时间段的“结果”应该没有值。

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

1 个答案:

答案 0 :(得分:2)

Name上使用DataFrame.groupby并使用groupby.shift来移动列Value,然后使用Series.div将其除以Value,最后使用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
相关问题