【问题标题】:Conditional grouped iteration over a Pandas DataFramePandas DataFrame 上的条件分组迭代
【发布时间】:2022-01-22 18:15:29
【问题描述】:

我有以下数据框:

user event_id event_creation event_b USD
a 1 2021/07/01 NaN 10
a 2 2021/07/02 2021/07/17 10
a 3 2021/07/22 2021/08/02 10
a 4 2021/07/24 2021/08/02 10
a 5 2021/07/24 2021/08/06 10
a 6 2021/08/16 2021/01/29 10
b 7 2021/08/18 2021/10/14 10

我想根据条件聚合 sum_cum 创建一个新列。
按用户分组,遍历 event_ids,
对于每个 event_id,查看所有之前的事件,并将 event_b 日期小于当前事件创建日期的所有事件的美元金额相加。
所以我会得到以下DataFrame:

user event_id event_creation event_b USD sum_cum
a 1 2021/07/01 NaN 10 0
a 2 2021/07/02 2021/07/17 10 0
a 3 2021/07/22 2021/08/02 10 10
a 4 2021/07/24 2021/08/02 10 10
a 5 2021/07/24 2021/08/06 10 10
a 6 2021/08/16 2021/01/29 10 40
b 7 2021/08/18 2021/10/14 10 0

我尝试创建循环但没有任何结果,我希望解释清楚,谢谢你的帮助:)

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    试试这个:

    df.apply(
        lambda x: df[
            (df.event_b < x.event_creation) &
            (df.event_id < x.event_id) &
            (df.user == x.user)
        ].USD.sum(),
        axis=1)
    

    您也可以使用groupby 代替df.user == x.user

    如果您有一个非常大的数据集,它可能会变得很慢,因为您正在为每一行切片 df。

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 2019-06-08
      • 2020-01-03
      • 2021-12-28
      • 2013-06-17
      • 2018-03-23
      • 2018-08-06
      • 2021-08-28
      • 2013-09-02
      相关资源
      最近更新 更多