如何基于MultiIndex列扩展pandas DataFrame为宽表格式?
将MultiIndex分组结果转为宽格式(缺失值补0)
你可以通过unstack()方法直接将MultiIndex的分组结果转换为宽格式,同时填充缺失值为0,再调整列名即可得到目标结构:
原代码与输出
你当前通过分组得到的带MultiIndex的结果:
new_data = data.groupby(['id','category']).sum('amount')
输出结构示例:
amount id category 1 2 12 3 1 2 1 45 3 56
解决方案代码
# 展开category为列,同时填充缺失值为0 wide_data = new_data.unstack(level='category', fill_value=0) # 重命名列,添加指定前缀 wide_data.columns = [f'amount_category_{col}' for col in wide_data.columns.get_level_values(1)] # 将id从索引转为普通列(按需选择,若需要id作为列则执行) wide_data = wide_data.reset_index()
代码说明
unstack(level='category', fill_value=0):将category层级的索引直接展开为列,fill_value=0参数一次性把缺失的category对应的数值填充为0,无需后续单独处理空值- 列名重命名:
unstack后列名是包含amount和category的MultiIndex,通过columns.get_level_values(1)提取category的数值,拼接成amount_category_xx格式的列名 reset_index():如果需要把id从索引转为普通列(和目标表格结构一致),执行此步骤;若保留id作为索引则可省略
运行后得到的结果结构如下:
id amount_category_1 amount_category_2 amount_category_3 1 0 12 1 2 45 0 56
内容的提问来源于stack exchange,提问作者Nastya Zolotareva
相关产品推荐
相关产品推荐

