You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas追加DataFrames时出现索引不匹配问题如何解决

问题根源
  • 第一,set_index方法默认不修改原DataFrame,你执行df_dict['Empty_Parishes'].set_index('PARISH')后没有将结果赋值回原变量,所以Empty_Parishes的索引仍然是默认的数字RangeIndex,PARISH还保留为普通列,和透视表Parish_Totals的索引结构不匹配。
  • 第二,pd.pivot_table同时指定values和columns参数时,生成的是多级列名,结构为(values名, Covenant Area名),但你手动构造的Empty_Parishes是单级列名,列名不匹配会导致append后数据错位。
解决方案

方案1:修正现有代码

  1. 先将透视表的多级列名压平为你定义的单级格式:
# 把列名从 (AP, POS) 转为 POS_AP,和你定义的column_heads匹配
df_dict['Parish_Totals'].columns = [f'{col[1]}_{col[0]}' for col in df_dict['Parish_Totals'].columns]
  1. 修正set_index的赋值逻辑:
# 赋值回原变量,索引才会生效
df_dict['Empty_Parishes'] = df_dict['Empty_Parishes'].set_index('PARISH')
  1. 合并两个表(高版本pandas已弃用append,推荐用concat):
df_dict['NEW'] = pd.concat([df_dict['Parish_Totals'], df_dict['Empty_Parishes']])

方案2:更简洁的reindex方法(无需手动构造空行)

不需要循环筛选缺失教区、构造空行,直接对透视表执行重索引操作,一步补全所有教区数据:

# 先压平透视表列名
df_dict['Parish_Totals'].columns = [f'{col[1]}_{col[0]}' for col in df_dict['Parish_Totals'].columns]
# 用全量教区列表重索引,缺失值自动填0
df_dict['NEW'] = df_dict['Parish_Totals'].reindex(all_parishes, fill_value=0)

内容的提问来源于stack exchange,提问作者GlassShark1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 20:24:02