我有一个使用Pandas和cumsum的问题,这不符合我的预期,所以想知道是否有人可以阐明它是如何工作的。
我的数据框如下所示:
| |price |flag |cum_sum |
|-----|---------|------|---------|
|0 |2 |1 |2 |
|1 |5 |1 |7 |
|2 |8 |1 |15 |
|3 |9 |0 |0 |
|4 |12 |0 |0 |
|5 |2 |1 |17 |
目前代码如下:
df['cum_sum'] = df.groupby(by=['flag','price']).sum().groupby(level=[1]).cumsum()
我只希望它总结一个指定标志的列。我觉得这应该很简单,但我错过了一些基本的东西。数据集很大,所以没有寻找任何循环或迭代答案。
答案 0 :(得分:1)
看起来你拥有自己想要的大部分内容。如果你想要0标志的空值(NaN),那么这样做:
df['cum_sum'] = df[df['flag'] == 1]['price'].cumsum()
flag price cum_sum
0 1 2 2.0
1 1 5 7.0
2 1 8 15.0
3 0 9 NaN
4 0 12 NaN
5 1 2 17.0
答案 1 :(得分:0)
这是你想要的吗?
In [15]: df.price.mul(df.flag).cumsum().mul(df.flag)
Out[15]:
0 2
1 7
2 15
3 0
4 0
5 17
dtype: int64