gpt4 book ai didi

python - pandas 按列分组,然后从每个组的日期列中获取平均天数

转载 作者:行者123 更新时间:2023-12-02 16:23:54 28 4
gpt4 key购买 nike

我有一个像这样的 pandas 数据名:

    customer_id    transaction_date   ......................
0 12341 2011-05-06
1 12341 2011-06-22
2 12341 2011-05-09
3 12342 2011-06-16
4 12342 2011-07-26
5 12342 2011-03-06
6 12343 2011-05-16
7 12343 2011-04-25
8 12342 2011-07-12
9 12343 2011-05-09
10 12343 2011-04-12
11 12342 2011-07-03

我正在尝试计算客户进行交易的平均间隔。换言之,每位客户每隔多少天进行一次交易。

这是我尝试过的:

dummy_data.groupby(by=['customer_id'])['transaction_date'].transform('mean')

我得到:

DataError: No numeric types to aggregate

我该怎么做?

编辑 1:

预期输出:

customer_id   avg_days
12341 24
12342 ..
12343 ..

解释:
对于 ID 为“12341”的客户,第一次交易的日期是 5 月 6 日,下一次交易的日期是 5 月 9 日,下一次交易的日期是 6 月 22 日。因此,前两次交易之间的天数差异为 3 天,下一次交易之间的天数为 45 天。所以,3 和 45 的平均值是 (45+3/2 = 48/2 = 24)。然后我需要为数据框中的所有客户执行此操作。

最佳答案

首先使用 pd.to_datetimetransaction_date 列转换为 pandas datetime

In [2947]: df.transaction_date = pd.to_datetime(df.transaction_date)

现在,使用 Groupby.shiftdf 中添加一个新列,其中包含两次交易之间的天数差异并使用 Groupby.mean 求平均值:

In [2976]: df['days'] = (df.sort_values('transaction_date').groupby('customer_id').transaction_date.shift() - df.transaction_date).dt.days.abs()

In [2985]: x = df.groupby('customer_id', as_index=False)['days'].mean().round()

In [2986]: x
Out[2986]:
customer_id days
0 12341 24.0
1 12342 36.0
2 12343 11.0

关于python - pandas 按列分组,然后从每个组的日期列中获取平均天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64940355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com