如何在Pandas中对含分类数据的日期按月分组?
在Pandas中同时处理分类与数值数据的按月分组方法
问题场景
数据框包含日期列、分类列(如Campaign_Name)和数值统计列,需要按月份+分类项分组,对数值列进行聚合(如求和),同时保留分类数据的分组维度。
示例数据
| Date | Campaign_Name | No_of_Male_Viewers | No_of_Female_Viewers |
|---|---|---|---|
| 2021-06-12 | Dove_birds | 1268 | 7656 |
| 2021-02-05 | Pantene_winner | 657 | 8964 |
| 2021-09-15 | Budweiser_wazap | 7642 | 76 |
| 2021-05-13 | Pantene_winner | 425 | 6578 |
| 2021-12-12 | Budweiser_wazap | 9867 | 111 |
| 2021-09-09 | Dove_birds | 1578 | 11456 |
| 2021-05-24 | Pantene_winner | 678 | 7475 |
| 2021-09-27 | Budweiser_wazap | 8742 | 96 |
| 2021-09-09 | Dove_soft | 1175 | 15486 |
解决步骤
- 转换日期列类型:将字符串格式的日期转为Pandas的datetime类型,方便提取月份信息。
- 生成月份名称:从datetime列中提取英文月份名称(如
February),作为分组维度之一。 - 分组聚合:同时按月份名称和**分类列
Campaign_Name**分组,对数值列执行求和操作。
完整代码示例
import pandas as pd # 构建示例数据 data = { 'Date': ['2021-06-12', '2021-02-05', '2021-09-15', '2021-05-13', '2021-12-12', '2021-09-09', '2021-05-24', '2021-09-27', '2021-09-09'], 'Campaign_Name': ['Dove_birds', 'Pantene_winner', 'Budweiser_wazap', 'Pantene_winner', 'Budweiser_wazap', 'Dove_birds', 'Pantene_winner', 'Budweiser_wazap', 'Dove_soft'], 'No_of_Male_Viewers': [1268, 657, 7642, 425, 9867, 1578, 678, 8742, 1175], 'No_of_Female_Viewers': [7656, 8964, 76, 6578, 111, 11456, 7475, 96, 15486] } df = pd.DataFrame(data) # 转换日期列 df['Date'] = pd.to_datetime(df['Date']) # 提取月份名称 df['Month'] = df['Date'].dt.month_name() # 分组聚合数值列 result = df.groupby(['Month', 'Campaign_Name'])[['No_of_Male_Viewers', 'No_of_Female_Viewers']].sum().reset_index() # 按自然月份顺序排序(可选) month_order = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] result['Month'] = pd.Categorical(result['Month'], categories=month_order, ordered=True) result = result.sort_values('Month') print(result)
部分预期输出
| Month | Campaign_Name | No_of_Male_Viewers | No_of_Female_Viewers |
|---|---|---|---|
| February | Pantene_winner | 657 | 8964 |
| May | Pantene_winner | 1103 | 14053 |
| June | Dove_birds | 1268 | 7656 |
| September | Budweiser_wazap | 16384 | 172 |
| September | Dove_birds | 1578 | 11456 |
| December | Budweiser_wazap | 9867 | 111 |
内容的提问来源于stack exchange,提问作者SSRN
相关产品推荐
相关产品推荐

