表(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 2020-01-01
3 2018-01-01
需要的输出:df的子集,其中customer_ID具有3个以上的order_dates。 (由于订单日期少于3,因此跳过2,4和5个客户ID)
Customer_id Number_of_Order_dates
1 3
3 5
我尝试了groupby,但是它无法创建子集。请帮助。
到目前为止尝试过的代码失败了:
df[df['days'].count()>3]
还有我尝试过的另一种错误:
df1=df.groupby('customer_id')['order_date'].count()
df[df1.iloc[:,1]]
蛮力方法是将groupby添加为新列(pointers),其名称类似于num_dates
,然后像这样限制整个df:
result = my_df[my_df['num_dates'] > 3]
您可以使用:
df.groupby('customer_id').filter(lambda x:
(x['Order_date'].nunique()>=3)).groupby('customer_id').count()
或:
(df[df.groupby('customer_id')['Order_date'].transform('nunique').ge(3)]
.groupby('customer_id').count())
Order_date
customer_id
1 3
3 5