如何在Pandas DataFrame中按日期统计关键词出现频次?
Pandas按天统计关键词出现次数的解决方法
嘿,刚接触Pandas的话确实容易在分组聚合这里卡壳,我来帮你搞定这个按天统计关键词次数的问题~
首先,先还原你的示例DataFrame,方便我们一起测试:
import pandas as pd # 构建示例数据 data = { 'keyword': ['cat', 'dog', 'cat', 'cat', 'elephant'], 'id': [0, 1, 2, 3, 4] } # 创建datetime64类型的索引 datetime_index = pd.to_datetime([ '2017-03-31 21:22:33+00:00', '2017-07-07 11:28:36+00:00', '2017-03-31 01:18:50+00:00', '2017-03-31 21:03:39+00:00', '2017-08-23 13:26:43+00:00' ]) df = pd.DataFrame(data, index=datetime_index)
为什么你之前的方法没得到想要的格式?
你用的df.resample('D').keyword.value_counts()其实已经统计出了正确的数据,但它返回的是一个多级索引的Series,不是你想要的扁平化DataFrame格式,只需要多一步处理就能得到目标结果。
两种可行的解决方法
方法一:用groupby + pd.Grouper(更直观)
直接按天和关键词分组,然后统计每组的数量:
# 按天分组(freq='D'代表天),同时按keyword分组,统计每组大小 result = df.groupby([pd.Grouper(freq='D'), 'keyword']).size().reset_index(name='count')
方法二:改进你原来的resample方法
在你原来的代码基础上,加上reset_index()把多级索引转成普通列:
# 先按天重采样,统计每个天组内的关键词次数,再重置索引 result = df.resample('D').keyword.value_counts().reset_index(name='count')
最终结果
运行上面任意一种方法后,打印result就能得到你想要的格式:
date keyword count 0 2017-03-31 cat 3 1 2017-07-07 dog 1 2 2017-08-23 elephant 1
小提示
如果你的DataFrame索引还不是datetime64类型,记得先转换:
df.index = pd.to_datetime(df.index)
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

