Pandas透视表存在空值,如何用其他列值填充并转换表结构
Pandas透视表实现及空值填充方案
1. 还原原始数据
先根据需求创建原始DataFrame:
import pandas as pd df = pd.DataFrame({ 'Food': ['Kiwi', 'Kiwi', 'Apple'], 'Compound': ['Fat', 'Protein', 'Protein'], 'Content in grams': [5, 3, 2] })
2. 透视并填充空值
推荐使用pivot_table一步完成透视和空值填充,它比pivot更适配这类单值分组场景:
# 透视表设置:按Food分组,Compound转列,填充空值为0 pivoted_result = df.pivot_table( index='Food', columns='Compound', values='Content in grams', fill_value=0, # 直接将空值替换为0 aggfunc='first' # 单条数据场景下,first/mean/sum效果一致 ).reset_index() # 清理列名层级,让结构更简洁 pivoted_result.columns.name = None
执行后输出结果:
| Food | Fat | Protein |
|---|---|---|
| Apple | 0 | 2 |
| Kiwi | 5 | 3 |
注:你提供的目标表格中Apple的Fat值标注为2,这与原始数据不符(原始数据中Apple无Fat记录),上述代码按逻辑填充为0,若需自定义填充值,只需修改
fill_value参数即可。
备选方案:先透视后补全空值
如果已经完成透视得到含空值的表,可单独用fillna补全:
# 先执行透视 pivoted_temp = df.pivot(index='Food', columns='Compound', values='Content in grams').reset_index() pivoted_temp.columns.name = None # 填充空值为0 pivoted_result = pivoted_temp.fillna(0)
内容的提问来源于stack exchange,提问作者proDucktive Mary
相关产品推荐
相关产品推荐

