在下表中,开始日期和结束日期表示计算唯一标识符的时间段。我的目标是计算唯一标识符落在日期之间的次数,但每月显示一次。我还想计算某个类别在该日期范围内的次数。
我是处理表数据和 Pandas 的新手,所以我有点不知所措。非常感谢您的帮助。
示例输入数据:
输出示例:
最佳答案
首先,我建议将日期列拆分为两个不同的列 year
和 month
以便您可以按它们分组。
df = (pd.DataFrame(records, columns=['start', 'end', 'id', 'cat'])
.astype({'start':'datetime64', 'end':'datetime64'})
.assign(year=lambda x: x['start'].dt.year)
.assign(month=lambda x: x['start'].dt.month))
然后可以将cat
列分解,方便计算
df_cats = (pd
.get_dummies(df['cat'], prefix='count')
.assign(total = lambda r: r['count_A']+r['count_B']+r['count_C']))
你会得到
现在你只需要合并两个 dfs 并使用 groupby.sum()
得到结果
pd.merge(df, df_cats, left_index=True, right_index=True).groupby(['year', 'month'].sum()
你最终会得到
关于python - 根据日期范围按类别计算总发生次数和发生次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66510748/