合并熊猫数据帧,合并非键的同一列



我想合并三个数据帧。我试图简化问题来解释:我df['1', '2', '3']列,df1['1', '2', '3']列,df2['1', '2', '3']

我想合并键 1 和 2 上的数据帧。

我尝试了以下方法(简化):

new = pd.merge(df, df1, how = 'left', on = [ '1', '2'])
new1 = pd.merge(new, df2, how = 'left', on = ['1', '2'])

现在你得到作为结果

  • new['1', '2', '3_x', '3_y']
  • new1['1', '2', '3_x', '3_y', '3_z']

虽然我想要

  • new['1', '2', '3']
  • new1['1', '2', '3']

欢迎任何帮助!我不想使用循环。

提前谢谢。

合并将仅"合并"您在"on"中指定的列(并且仅在列上)。也就是说,这正在按预期工作。

如果您有匹配的列 1 和 2,但不同的列 3 并且您进行了合并,那么新输出中的每一列中应该包含什么? 1 和 2 将是它们在两个原件中的样子,但第 3 列有两个不同的选项。合并的功能是按不同的列拆分它们。

相反,您可能在这里想要的是append.追加会将一个数据帧放在另一个数据帧下方,如本页所述:https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html#concatenating-using-append。

这将为您提供一个包含列'1', '2', '3'的输出。

new = df.append(df1)
new1 = new.append(df2)

你甚至可以做new = df.append([df1,df2]),但我没有尝试过,手边没有 3 个数据帧。

您确实说过只想合并第 1 列和第 2 列,所以我可能完全错过了您在这里的观点。在这种情况下,您希望对第 3 列中的数据做什么?您可以通过使用append然后删除一些重复项或以其他方式清理此输出来实现此目的。

最新更新