如何通过特定变量在 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
我有一个这样的数据框:
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