Pandas多列透视表实现失败求助:按pcd分组聚合需求
正确实现方案
原代码的问题
- 字典语法错误:
aggfunc里的键值对用了=,Python字典需用: - 聚合函数错误:
avg不是Pandas支持的聚合函数,需替换为'mean'或np.mean - 核心逻辑缺失:未先将分类字段
INCOME、Education转为哑变量,直接用pivot_table无法生成分类对应的独立列 - 索引设置错误:需求是以
pcd为唯一索引,原代码错误将age1to_20加入索引
完整实现步骤
- 生成哑变量:用
pd.get_dummies将INCOME、Education的每个分类转为独立的0/1列 - 分组聚合:按
pcd分组,对哑变量列和age1to_20求和,对TG求平均值 - 缺失值填充:用
fillna(0)处理可能的空值
代码示例
import pandas as pd import numpy as np # 1. 转换分类字段为哑变量 df_dummies = pd.get_dummies(df, columns=['INCOME', 'Education'], drop_first=False) # 2. 构建聚合规则字典 agg_rules = {} # 对所有哑变量列设置求和 for col in df_dummies.columns: if col.startswith('INCOME_') or col.startswith('Education_'): agg_rules[col] = 'sum' # 设置其他字段的聚合方式 agg_rules['age1to_20'] = 'sum' agg_rules['TG'] = 'mean' # 3. 分组聚合并填充缺失值 final_result = df_dummies.groupby('pcd').agg(agg_rules).fillna(0)
代码说明
pd.get_dummies(..., drop_first=False):保留所有分类的哑变量列(若需避免多重共线性可设为True)- 聚合规则字典:明确指定每个字段的聚合逻辑,哑变量求和得到每个分类在对应
pcd下的累计数量 groupby('pcd').agg(...):严格按pcd分组,满足需求的索引要求
内容的提问来源于stack exchange,提问作者nuke
相关产品推荐
相关产品推荐

