【发布时间】:2020-04-18 12:00:36
【问题描述】:
表(df):
customer_id Order_date
1 2015-01-16
1 2015-01-19
2 2014-12-21
2 2015-01-10
1 2015-01-10
3 2018-01-18
3 2017-03-04
4 2019-11-05
4 2010-01-01
3 2019-02-03
3 2019-01-01
3 2018-01-01
我想要的输出:
使用 groupby 为每个客户 ID 提取 order_dates 数量(一个人至少有 3 笔交易)的代码,我还需要说最近的交易日期。
Customer_id No_order_date Most recent order date
1 3 2015-01-19
3 5 2019-02-03
到目前为止尝试过的代码:
freq = 3
df.groupby('customer_id')['order_date'].nunique().loc[lambda x:
x>=freq].reset_index().rename(columns={'order_date':'No_Order_Dates'})
Customer_id No_Order_Dates
1 3
3 5
df.groupby('customer_id')['order_date'].max().reset_index().rename(columns=
{'order_date':'Most recent order Date'})
Customer_id Most recent order date
1 2015-01-19
3 2019-02-03
如何组合两个 groupby 输出?我需要两个都在一个表中(有没有一种方法可以在不使用连接或合并的情况下加入,或者我必须只使用连接/合并)
【问题讨论】:
-
df.groupby('customer_id')['Order_date'].agg({'Order_date_nunique':'nunique','Most recent order date':'max'})? -
或命名为 agg:
df.groupby('customer_id').agg(Order_date = ('Order_date','nunique'),Most_recent_order_date = ('Order_date','max'))没问题 :) -
这样更好,因为我还可以使用命名聚合来聚合其他列
-
df.groupby('customer_id').agg(No_transactions=('order_date','nunique().loc[lambda x: x>=7]',Most_recent_order_date = ('order_date', 'max')) 不起作用。Lambda 在聚合的情况下不起作用?@anky_91
-
请重新打开问题'
标签: python pandas merge group-by