我想合并三个数据帧。我试图简化问题来解释:我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
然后删除一些重复项或以其他方式清理此输出来实现此目的。