Python Pandas中忽略行索引拼接多个DataFrame的问题求助
解决DataFrame合并对齐问题的两种方法
你用pd.concat出现对齐错误的核心原因是:这个方法默认按DataFrame的行索引拼接,但你真正用来关联三个表的是Index列,不是行索引,所以Year列和VarA/VarB才会错位。
下面是两种直接可行的解决方式:
方法一:用merge按关联列合并
先把带VarA、VarB的表合并,再和带Year的表基于Index列关联,最后调整行索引:
# 合并df2和df3,以Index列为关联键 df_var = pd.merge(df2, df3, on='Index') # 再和df1合并,保留df1的所有行(按需调整how参数) final_df = pd.merge(df1, df_var, on='Index', how='left') # 将行索引重置为0、1 final_df = final_df.reset_index(drop=True)
方法二:统一索引后再concat
先把所有表的行索引替换成Index列的值,让concat能按正确维度对齐:
# 把三个表的行索引都替换为各自的Index列值 df1 = df1.set_index('Index') df2 = df2.set_index('Index') df3 = df3.set_index('Index') # 按列拼接,此时会基于统一后的索引对齐所有列 final_df = pd.concat([df1, df2, df3], axis=1) # 重置行索引为0、1 final_df = final_df.reset_index(drop=True)
如果你的Index列是唯一且一一对应的,两种方法都能得到你想要的结果。要是存在缺失数据,可以把merge里的how参数改成left来保留df1的全部行。
内容的提问来源于stack exchange,提问作者Humzah Qazilbash
相关产品推荐
相关产品推荐

