根据列的计数值的数据帧子集

问题描述 投票:0回答:2

表(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]]
python pandas group-by subset
2个回答
0
投票

蛮力方法是将groupby添加为新列(pointers),其名称类似于num_dates,然后像这样限制整个df:

result = my_df[my_df['num_dates'] > 3]


0
投票

您可以使用:

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
© www.soinside.com 2019 - 2024. All rights reserved.