按类别计算行和分组之间的日期差

时间:2019-03-05 15:19:52

标签: python pandas

我有一组客户和购买日期的数据,其中多个客户在不同的日期进行了购买。我想找到每个客户两次购买之间的平均天数。

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中完成。

感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:1)

输入日期datetimesort,以便计算出正确的差额。然后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