在给定大熊猫的日期范围时,如何进行月度计数



我有一个数据帧,记录用户、标签以及他们被标记的开始和结束日期例如

开始日期2020-01-01
用户 标签结束日期
1 x 2018-01-01 2018-10-01
2 x 2019-05-10
3 y 2019-04-01 2022-04-20
1 b 2018-10-01 2020-05-08

您可以使用date_rangeto_period组合生成活动月份,然后使用pivot_tableaggfunc='nunique'聚合唯一用户(如果您想计算重复用户,请使用aggfunc='count'(:

out = (df
.assign(period=[pd.date_range(a, b, freq='M').to_period('M')
for a,b in zip(df['start_date'], df['end_date'])])
.explode('period')
.pivot_table(index='period', columns='label', values='user',
aggfunc='nunique', fill_value=0)
)

输出:

label    b  x  y
period          
2018-01  0  1  0
2018-02  0  1  0
2018-03  0  1  0
2018-04  0  1  0
2018-05  0  1  0
...
2021-12  0  0  1
2022-01  0  0  1
2022-02  0  0  1
2022-03  0  0  1

处理NaT

如果你有相同的开始/结束,并且想要计算值:

out = (df
.assign(period=[pd.date_range(a, b, freq='M').to_period('M')
for a,b in zip(df['start_date'], df['end_date'])])
.explode('period')
.assign(period=lambda d: d['period'].fillna(d['start_date'].dt.to_period('M')))
.pivot_table(index='period', columns='label', values='user',
aggfunc='nunique', fill_value=0)
)

相关内容

  • 没有找到相关文章

最新更新