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

如何在Pandas中对齐不同DataFrame指定行索引以实现数据对比?

嘿,我完全懂你想要实现的效果——把两个不同年份DataFrame里对应项目的数值放到同一行,这样就能轻松做对比柱状图对吧?咱们一步步来解决这个问题:

1. 先提取目标数据并重命名列

首先把你需要的特定行数据单独拎出来,顺便给列重命名,这样后续合并后能清晰区分年份:

# 提取df1中2011年的b1数据,重命名列便于识别
df_2011 = df1.iloc[49:50, 6:7].rename(columns={df1.columns[6]: '2011年数值'})
# 提取df2中2016年的bt数据,同样重命名列
df_2016 = df2.iloc[51:52, 6:7].rename(columns={df2.columns[6]: '2016年数值'})
2. 对齐索引后合并成同一行

你之前用pd.concat没得到想要的结果,大概率是因为两个切片的原始索引不一致,导致工具默认按行拼接了。咱们只要让它们的索引对齐,就能按列合并到同一行:

方法一:重置索引后合并

如果不需要保留原索引,直接重置成一致的索引即可:

# 重置索引,丢弃原索引避免干扰
df_2011_reset = df_2011.reset_index(drop=True)
df_2016_reset = df_2016.reset_index(drop=True)

# 按列合并,得到一行两列的对比结构
comparison_df = pd.concat([df_2011_reset, df_2016_reset], axis=1)

方法二:手动设置相同的项目索引

如果这个数据对应特定的项目名称,也可以给两行设置相同的索引(比如项目名),这样合并后的结果可读性更强:

# 给两行设置相同的项目名作为索引
df_2011.index = ['XX项目']
df_2016.index = ['XX项目']

# 按列合并
comparison_df = pd.concat([df_2011, df_2016], axis=1)
3. 验证结果并绘图

合并后的comparison_df会是这样的结构:

2011年数值2016年数值
XX项目1184913500

接下来直接用这个DataFrame绘制对比柱状图就行:

import matplotlib.pyplot as plt

comparison_df.plot(kind='bar', rot=0)
plt.title('同一项目2011 vs 2016数值对比')
plt.show()

内容的提问来源于stack exchange,提问作者Anthony.H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:53:52