pandas 计算行之间的日期差并按类别分组Python

pnwntuvh  于 2023-06-20  发布在  Python
关注(0)|答案(2)|浏览(126)

我有一个客户和购买日期的数据集,其中多个客户在不同的日子进行了购买。我想找出每个客户购买之间的平均天数差异。

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中完成。
任何帮助或指导都将感激不尽。

bejyjqdl

bejyjqdl1#

将日期设为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
iyzzxitl

iyzzxitl2#

您还可以执行以下操作:

根据customerid和service_txn_date对DataFrame进行排序

df = df.sort_values(['customerid','service_txn_date'])
df

计算每个客户连续服务交易的时间差

df['time_diff'] = df.groupby('customerid ')['service_txn_date'].diff()
df

计算每个客户平均回访天数

average_days_to_come_back = df.groupby('customerid ')['time_diff'].mean()

相关问题