【发布时间】:2021-04-28 22:46:14
【问题描述】:
我有两个数据框(df1 和 df2)。 df1 包含所有用户 ID、购买日期和购买金额:
index user date_1 value
0 a 2021-02-05 50.0
1 b 2021-02-20 12.0
2 a 2021-03-06 45.0
3 c 2021-03-05 30.0
4 c 2021-03-15 44.0
... ... ... ...
df2 有用户 ID 和他们成为用户的日期:
index user date_2
0 a 2021-02-05
1 b 2021-02-20
2 c 2021-03-06
3 d 2021-03-20
... ... ...
目标:我希望在 df2 中添加一个新列,用于汇总每个用户第一个月的交易价值。
我找到了以下线程:
Pandas group by then count sum...
但是,这会将所有内容都保存在一个数据框中,我在尝试混合 apply、lambda、groupby 和 sum 函数时迷失了方向。我已经进行了以下设置,但它为新列返回了不正确的值:
def f(x, y, t):
return x.apply(lambda y: x.loc[x['date_1'].between(y['date_2'],
y['date_2'] + t,
inclusive=False),'value'].sum(),axis=1)
df2['monthly_volume'] = df1.groupby('user', group_keys=False).
apply(f, df2,
pd.Timedelta(30, unit='D'))
最终,随着我获得更多数据,我还会查找用户在注册后的第二个月、第三个月等的购买量。除了修复它之外,也许还有更好的办法让它可重复。感谢您的帮助!
【问题讨论】: