【问题标题】:Pandas cumsum on a separate column conditionPandas cumsum 在单独的列条件下
【发布时间】:2017-03-08 06:55:56
【问题描述】:

我在使用 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()

我只希望它对指定标志的列求和。我觉得这应该很简单,但我缺少一些基本的东西。数据集很大,所以没有寻找任何循环或迭代答案。

【问题讨论】:

  • 你想要的输出是什么?
  • 所以当flag 为1 时,您只想获得price 列的累积和?
  • 如果你想 sum() 价格,你试过“df.groupby('flag')['price'].cumsum()”吗? sum() 之后的查询部分似乎与我无关。

标签: python pandas


【解决方案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

【讨论】:

    【解决方案2】:

    这是你想要的吗?

    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
    

    【讨论】:

      猜你喜欢
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多