我有一个每日累计金额,我想将其细分为每日价值。当然,也需要将其分组。
例如,我想获取此数据框并返回以下结果:
ID Date Cum Value
3306 2019-06-01 100.0
3306 2019-07-01 200.0
3306 2019-08-01 350.0
4408 2019-06-01 200.0
4408 2019-07-01 375.0
4408 2019-08-01 400.0
ID Date Cum Value Daily Value
3306 2019-06-01 100.0 100.0
3306 2019-07-01 200.0 100.0
3306 2019-08-01 350.0 150.0
4408 2019-06-01 200.0 200.0
4408 2019-07-01 375.0 175.0
4408 2019-08-01 400.0 025.0
我尝试过
df['Daily Value'] = df['Cum Value'].sub(df['Cum Value'].shift())
df['Daily Value'].iloc[0] = df['Cum Value'].iloc[0]
答案 0 :(得分:1)
我们还可以使用Series.sub
+ GroupBy.shift
df['Daily Value']=df['Cum Value'].sub(df.groupby('ID')['Cum Value'].shift(fill_value=0))
print(df)
输出:
ID Date Cum Value Daily Value
0 3306 2019-06-01 100.0 100.0
1 3306 2019-07-01 200.0 100.0
2 3306 2019-08-01 350.0 150.0
3 4408 2019-06-01 200.0 200.0
4 4408 2019-07-01 375.0 175.0
5 4408 2019-08-01 400.0 25.0
我认为它可能会更快