如何在 DataFrame 中获取条件平均日期?

How get Conditional average on date in DataFraem?

我有一个数据框,其中有些行是相等的,首先我想用相等行中较小的日期减去较大的日期,然后最后计算得到的日期的平均值,即平均几天。但只有 select 个日期至少有两个 Order_id 和一个 Customer_id,我的数据框如下所示:

Customer_id   date     Order_id
12          22/11/2021     2
12          29/11/2021     2
12          30/11/2021     2
42          10/11/2021     2
42          18/11/2021     2
43          19/11/2021     3

然后减去日期:(最后一行没有 selected 因为它有一个 customer_ID 和一个 order_id)

Customer_id   date     Order_id  Subtract_date
12          22/11/2021     2         8
12          29/11/2021     2         8
12          30/11/2021     2         8
42          10/11/2021     2         8
42          18/11/2021     2         8

然后删除重复的行,最后取Subtract_date列的平均值:

Customer_id   date     Order_id  Subtract_date
12          22/11/2021     2         8
42          10/11/2021     2         8

如果我理解正确,试试这个:

df.groupby(['Customer_id', 'oder_id']).agg(np.ptp).reset_index().rename({'date':'Subtract_date'}, axis = 1)

输出:

您可以运行以下删除有 1 个订单的客户:

cust_to_keep = df.groupby('Customer_id').date.transform('count')
df = df.loc[cust_to_keep>1]

然后利用 Groupby 和 NamedAggregation 获得所需的输出:

import datetime as dt
df.groupby(['Customer_id','Order_id']).agg(date=('date','min'),Subtract_date = ('date',lambda x:(x.max()-x.min()).days)).reset_index()