我有一个熊猫数据框,如下所示:
id price hour minute date
1 10 03 07 01/11
2 4 03 59 01/11
3 5 02 21 01/11
4 6 03 47 02/09
5 1 04 28 02/04
6 7 05 50 01/11
7 3 02 01 01/11
8 2 01 23 01/11
...
我想要一个输出,如:
id price hour minute date cumprice
1 10 03 07 01/11 19
2 4 03 59 01/11 14
3 5 02 21 01/11 20
4 6 03 47 02/09 6
5 1 04 28 02/04 1
6 7 05 50 01/11 7
7 3 02 01 01/11 10
8 2 01 23 01/11 10
...
我不知道要快完成这项工作。 任何人都可以帮助我,快速做到这一点?
答案 0 :(得分:3)
您可以groupby
date
并使用transform
添加一列,其中包含每组价格的sum
:
df['cumsprice'] = df.groupby('date').price.transform('sum')
id price hour minute date cumsprice
0 1 10 3 7 01/11 19
1 2 4 3 59 01/11 19
2 3 5 2 21 01/11 19
3 4 6 3 47 02/09 6
4 5 1 4 28 02/04 1
更新
在更改预期的解决方案后进行更新。为了对相等的连续日期进行分组,您可以通过检查日期更改在哪些行上并采用其中的cumsum
来创建自定义分组器:
g = df.date.ne(df.date.shift(1))
df['cumprice'] = df.groupby(g.cumsum()).price.transform('sum')
print(df)
id price hour minute date cumsprice cumprice
0 1 10 3 7 01/11 31 19.0
1 2 4 3 59 01/11 31 19.0
2 3 5 2 21 01/11 31 19.0
3 4 6 3 47 02/09 6 6.0
4 5 1 4 28 02/04 1 1.0
5 6 12 5 50 01/11 31 12.0