我有一组客户和购买日期的数据,其中多个客户在不同的日期进行了购买。我想找到每个客户两次购买之间的平均天数。
Cust Date
A 01/01/2019
B 01/01/2019
B 01/01/2019
A 03/01/2019
B 02/01/2019
A 05/01/2019
中间df可能是不同之处:
A B
2 0
2 1
然后可以将其用于计算每个客户的平均值 请注意,某些购买可能会在同一天进行,因此会记录为0。
最终的DF将如下所示:
Customer No.of Purchases AVG diff
A 3 1
B 3 0.5
我了解此过程,但是代码有麻烦。唯一客户的数量是100+,因此我需要一些代码才能为许多客户解决。我猜我将不得不遍历数据并以某种方式存储中间值,但是我不确定如何在python中完成。
感谢任何帮助或指导。
答案 0 :(得分:1)
输入日期datetime
和sort
,以便计算出正确的差额。然后groupby
的每个客户获得您想要的计算:
import pandas as pd
df['Date'] = pd.to_datetime(df.Date, format='%d/%m/%Y')
df = df.sort_values('Date')
def AVG_diff(x):
# Integer number of Days
return x.diff().mean().total_seconds()/86400
df.groupby('Cust').Date.agg(['size', AVG_diff])
# Cust size AVG_diff
#0 A 3 2.0
#1 B 3 0.5