如何在Pandas中按多列分组?茶企CSV数据分层分组实现
多列分层分组统计解决方案
首先需要先把Date字段转换为**年月(YearMonth)**格式,再按指定的三层维度分组统计。以下是完整实现步骤:
1. 数据预处理:生成YearMonth字段
先读取CSV并将Date转为日期类型,再提取年月维度:
import pandas as pd # 读取CSV文件 df = pd.read_csv('your_tea_data.csv') # 将Date转为日期格式(根据你的实际数据格式调整format参数,比如'%Y/%m/%d') df['Date'] = pd.to_datetime(df['Date'], format='%Y-%m-%d') # 生成YearMonth字段,格式为YYYY-MM的周期类型 df['YearMonth'] = df['Date'].dt.to_period('M')
2. 多列分层分组统计
直接在groupby中传入分组字段的列表,顺序对应你需要的分层优先级:YearMonth → Type → Weight,然后聚合Quantity的总和:
# 按三层维度分组,统计每组Quantity的总和 grouped_result = df.groupby(['YearMonth', 'Type', 'Weight'])['Quantity'].sum()
3. 分层展示结果
默认的分组结果会以**多层索引(MultiIndex)**形式展示,直接打印就能看到分层结构:
print(grouped_result)
输出示例大致如下:
YearMonth Type Weight 2023-01 Green 100g 1500 500g 800 Black 100g 2200 500g 1200 2023-02 Green 100g 1800 ... Name: Quantity, dtype: int64
如果需要更直观的表格形式,可以用unstack()把某一层索引转成列:
# 将Weight层转为列,方便横向对比查看 print(grouped_result.unstack(level='Weight'))
补充说明
- 确保
Type和Weight字段为字符串/分类类型,避免因数据类型异常导致分组错误 - 如果你的
Date格式不是标准的YYYY-MM-DD,需要调整pd.to_datetime中的format参数匹配实际数据格式
内容的提问来源于stack exchange,提问作者John Snape
相关产品推荐
相关产品推荐

