Pandas透视表重新索引问题:如何添加缺失的'E'相关数据
解决透视表缺失指定类别问题
问题原因
你创建new数据集时,筛选了Marks2 <= 50的数据,但原数据中'E'对应的所有Marks2值(60、65、70)都大于50,导致'E'被完全过滤出new,后续生成的透视表temp里自然没有'E'的索引和列。直接用reindex虽然能添加上'E',但需要确保行列都包含所有需要的类别。
解决方案
先从原数据中提取所有出现过的Name1和Name2值,生成完整的行列标签列表,再对透视表重新索引,就能保留'E'的位置:
import pandas as pd # 原数据 df1 = pd.DataFrame({'Name1':['A','Q','A','B','B','C','C','C','E','E','E'], 'Name2':['B','C','D','C','D','D','A','B','A','B','C'],'Marks2':[10,20,6,50, 88,23,140,9,60,65,70]}) # 筛选数据 new = df1.loc[(df1['Marks2'] <= 50)] # 生成透视表 temp = new.pivot_table(index="Name1", columns="Name2", values="Marks2") # 获取所有出现过的姓名,确保包含'E' all_names = sorted(set(df1['Name1'].unique()) | set(df1['Name2'].unique())) # 重新索引,指定行列都用完整的姓名列表 matrix = temp.reindex(index=all_names, columns=all_names)
最终输出
执行后得到的透视表如下(空值显示为NaN):
| Name1 | A | B | C | D | E | Q |
|---|---|---|---|---|---|---|
| A | NaN | 10.0 | NaN | 6.0 | NaN | NaN |
| B | NaN | NaN | 50.0 | NaN | NaN | NaN |
| C | NaN | 9.0 | NaN | 23.0 | NaN | NaN |
| E | NaN | NaN | NaN | NaN | NaN | NaN |
| Q | NaN | NaN | 20.0 | NaN | NaN | NaN |
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

