在Pandas DataFrame中按月份统计各物品的出现次数
解决方案
我们可以通过日期格式转换 + 透视表统计快速实现需求,具体操作步骤如下:
1. 把Date列转为datetime类型
首先要确保日期列是Pandas可识别的datetime格式,否则无法提取月份:
import pandas as pd # 假设你的原始数据框叫df df['Date'] = pd.to_datetime(df['Date'])
2. 提取月份英文缩写
新增一列存储月份的缩写(Jan、Feb这类),用strftime('%b')直接生成:
df['Month'] = df['Date'].dt.strftime('%b')
3. 生成统计透视表
用两种方法都能实现需求,选你顺手的就行:
方法一:用pivot_table
result_df = pd.pivot_table( df, index='Items', # 把Items设为行索引 columns='Month', # 月份作为列 values='Date', # 随便选一列,我们要的是计数 aggfunc='count', # 统计出现次数 fill_value=0 # 没有数据的单元格填0 )
方法二:用crosstab(更简洁)
result_df = pd.crosstab(df['Items'], df['Month']).fillna(0).astype(int)
4. 调整月份列顺序(可选)
如果你的数据有多个月份,想按自然顺序排列列,可以手动指定顺序:
# 定义全年月份的缩写顺序 month_order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] # 只保留数据中存在的月份,并按顺序排列 result_df = result_df.reindex(columns=[m for m in month_order if m in result_df.columns])
最终示例效果
用你提供的样例数据运行后,结果会是这样:
| Items | Jan | Feb |
|---|---|---|
| Item1 | 2 | 1 |
| Item2 | 1 | 0 |
| Item3 | 1 | 0 |
内容的提问来源于stack exchange,提问作者Young42
相关产品推荐
相关产品推荐

