有没有办法在行和列索引上合并熊猫数据框?
Posted
技术标签:
【中文标题】有没有办法在行和列索引上合并熊猫数据框?【英文标题】:Is there a way to merge pandas dataframes on row and column index? 【发布时间】:2019-06-29 13:07:04 【问题描述】:我想合并两个共享相同索引以及某些列的 pandas 数据框。 pd.merge 创建重复的列,但我想同时在两个轴上合并。
尝试了 pd.merge 和 pd.concat 但没有得到正确的结果。
我的尝试:df3=pd.merge(df1, df2, left_index=True, right_index=True, how='left')
df1
Var#1 Var#2 Var#3 Var#4 Var#5 Var#6 Var#7
ID
323 7 6 8 7.0 2.0 2.0 10.0
324 2 1 5 3.0 4.0 2.0 1.0
675 9 8 1 NaN NaN NaN NaN
676 3 7 2 NaN NaN NaN NaN
df2
Var#6 Var#7 Var#8 Var#9
ID
675 1 9 2 8
676 3 2 0 7
理想情况下我会得到:
df3
Var#1 Var#2 Var#3 Var#4 Var#5 Var#6 Var#7 Var#8 Var#9
ID
323 7 6 8 7.0 2.0 2.0 10.0 NaN NaN
324 2 1 5 3.0 4.0 2.0 1.0 NaN NaN
675 9 8 1 NaN NaN 1 9 2 8
676 3 7 2 NaN NaN 3 2 0 7
【问题讨论】:
非常感谢,成功了。我不知道这种方法。 【参考方案1】:IIUC,使用df.combine_first()
:
df3=df1.combine_first(df2)
print(df3)
Var#1 Var#2 Var#3 Var#4 Var#5 Var#6 Var#7 Var#8 Var#9
ID
323 7 6 8 7.0 2.0 2.0 10.0 NaN NaN
324 2 1 5 3.0 4.0 2.0 1.0 NaN NaN
675 9 8 1 NaN NaN 1.0 9.0 2.0 8.0
676 3 7 2 NaN NaN 3.0 2.0 0.0 7.0
【讨论】:
谢谢,试过了。我真的很想在输出中的一列中包含两个数据框中同一列的值,例如不应有两列名为 Var#6。【参考方案2】:您可以连接和分组数据
pd.concat([df1, df2], 1).groupby(level = 0, axis = 1).first()
Var#1 Var#2 Var#3 Var#4 Var#5 Var#6 Var#7 Var#8 Var#9
ID
323 7.0 6.0 8.0 7.0 2.0 2.0 10.0 NaN NaN
324 2.0 1.0 5.0 3.0 4.0 2.0 1.0 NaN NaN
675 9.0 8.0 1.0 NaN NaN 1.0 9.0 2.0 8.0
676 3.0 7.0 2.0 NaN NaN 3.0 2.0 0.0 7.0
【讨论】:
@anky_91,谢谢。我们都处于不同的学习阶段:)以上是关于有没有办法在行和列索引上合并熊猫数据框?的主要内容,如果未能解决你的问题,请参考以下文章