我有一个这样的数据框:Time Name Value2007Q1 A 302007Q2 A 352007Q3 A 28...2007Q1 B 312007Q2 B 502007Q3 B 60...2007Q1 C 202007Q2 C 152007Q3 C 30我想添加另一个名为结果的列,并在每个名称的每一行之间执行计算。我想使用一个季度的值除以上一季度的值,然后减去 1,这类似于Value(Q2)/Value(Q1)-1。另外,我想按名称分组,只在具有相同名称的行内进行计算。结果应该是这样的:Time Name Value Results2007Q1 A 30 2007Q2 A 35 0.16672007Q3 A 28 -0.2...2007Q1 B 31 2007Q2 B 50 0.61292007Q3 B 60 0.2...2007Q1 C 202007Q2 C 15 -0.252007Q3 C 30 1每个“名称”的开始时间段不应具有结果值。感谢所有能提供帮助的人!
1 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
使用DataFrame.groupby
onName
并使用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
添加回答
举报
0/150
提交
取消