如何在Pandas DataFrame中透视两列生成目标结构新表
Pandas 实现长表转宽表(透视并填充缺失值为0)
需求说明
将原始长格式DataFrame按Region分组,把Status的0、1两个取值转为独立列Status_0_count和Status_1_count,缺失的数值填充为0。
原始数据构造(可直接运行测试)
import pandas as pd data = { 'Region': ['East', 'East', 'West', 'West', 'South', 'North', 'North'], 'Status': [0, 1, 0, 1, 0, 0, 1], 'Count': [2500, 31, 1532, 25, 1200, 690, 25] } df = pd.DataFrame(data)
方法一:使用pivot_table(推荐,直接处理缺失值)
pivot_table可以在透视时直接指定填充缺失值的默认值,适合存在重复分组的场景:
# 透视并填充缺失值为0 df1 = df.pivot_table( index='Region', columns='Status', values='Count', fill_value=0, aggfunc='sum' # 因每组唯一,sum/first效果一致 ).reset_index() # 重命名列名至目标格式 df1.columns = ['Region', 'Status_0_count', 'Status_1_count']
方法二:使用pivot后填充缺失值
如果确定每组Region+Status唯一,也可以先用pivot转换,再手动填充缺失值:
# 透视转换 df1 = df.pivot(index='Region', columns='Status', values='Count') # 填充缺失值为0并重置索引 df1 = df1.fillna(0).reset_index() # 重命名列名 df1.columns = ['Region', 'Status_0_count', 'Status_1_count']
最终效果
运行上述代码后,df1将完全符合目标结构,其中South区域的Status_1_count会被填充为0。
内容的提问来源于stack exchange,提问作者Vivek kanna Jayaprakash
相关产品推荐
相关产品推荐

