【问题标题】:Python - Pandas: Create new column that is the aggregate sum of another column's group conditional on a date columnPython - Pandas:创建新列,该列是另一列的组以日期列为条件的总和
【发布时间】:2023-01-28 02:19:11
【问题描述】:

样本数据:

Column A Column B Column C
Bill 1 2022-09-01
John 0 2022-09-02
Bill 1 2022-09-04
Bill 0 2022-09-10

我想创建一个列,其中 B 列是基于 A 列求和的......但只有 C 列小于或等于当前行的实例。

我想要的是:

Column A Column B Column C NEW COL
Bill 1 2022-09-01 0
John 0 2022-09-02 0
Bill 1 2022-09-04 1
Bill 0 2022-09-10 2

因此,新列是在 A 列上分组的 B 列的总和,但它只是对 C 列中当前行之前的日期的 B 列求和。因此,在上面的最后一行中,Bill 在 NEW COL 中有一个 2,因为 B 列是针对 2022-09-10 之前的所有实例求和的。

我有一个基本聚合的 groupby:

df.groupby('Column A')['Column B'].transform(np.sum)

但这并没有考虑日期,我一直在纠结到底是使用 groupby 还是需要使用 lambda 函数。

【问题讨论】:

    标签: python pandas conditional-statements aggregate


    【解决方案1】:

    尝试这个。

     df['NEW COL'] = (df.groupby('Column A')
                       .apply(lambda x: x[x['Column C'] <= x['Column C']]
                       .sum()['Column B']))
    

    【讨论】:

      【解决方案2】:

      IIUC:

      (df.sort_values(by='Column C')
         .groupby('Column A')['Column B']
         .transform(lambda s: s.cumsum().shift(fill_value=0))
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-07
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 2020-07-07
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多