如何在 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()
我有一个数据框,其中有些行是相等的,首先我想用相等行中较小的日期减去较大的日期,然后最后计算得到的日期的平均值,即平均几天。但只有 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()