获取 pandas 中某些日期范围的平均值
get the average of some ranges of dates in pandas
我需要按 customer_id 对数据进行分组并获取购买日期间隔的平均值。我的数据如下所示:
date customer_id
1/1/2020 1
1/2/2020 2
1/3/2020 3
1/4/2020 1
1/5/2020 2
1/1/2021 1
1/2/2021 2
1/3/2021 3
所以我需要查看每个客户的平均日期范围是多少。期望的输出是:
customer_id Average_date_ranges(in months)
1 7
2 5
3 12
我认为您可以简单地将 date 列类型转换为 datetime
对象,然后调用 groupby
来获取平均日期。您可以使用以下代码:
df["date"] = pd.to_datetime(df["date"])
df.groupby("customer_id").mean()
使用 groupby_apply
的简单近似可以是:
>>> df.groupby('customer_id', as_index=False)['date'] \
.apply(lambda x: round(x.diff().mean().days / 30, 0))
customer_id date
0 1 6.0
1 2 6.0
2 3 12.0
我需要按 customer_id 对数据进行分组并获取购买日期间隔的平均值。我的数据如下所示:
date customer_id
1/1/2020 1
1/2/2020 2
1/3/2020 3
1/4/2020 1
1/5/2020 2
1/1/2021 1
1/2/2021 2
1/3/2021 3
所以我需要查看每个客户的平均日期范围是多少。期望的输出是:
customer_id Average_date_ranges(in months)
1 7
2 5
3 12
我认为您可以简单地将 date 列类型转换为 datetime
对象,然后调用 groupby
来获取平均日期。您可以使用以下代码:
df["date"] = pd.to_datetime(df["date"])
df.groupby("customer_id").mean()
使用 groupby_apply
的简单近似可以是:
>>> df.groupby('customer_id', as_index=False)['date'] \
.apply(lambda x: round(x.diff().mean().days / 30, 0))
customer_id date
0 1 6.0
1 2 6.0
2 3 12.0