【发布时间】:2020-08-12 18:34:20
【问题描述】:
我有两个要在 CCOL 列上合并的数据框:我给出一个简短的示例,如下所示:(同名的 Cols 在两个数据框中具有相同的数据)
df1 =
CCOL ColA ColB ColC ColD ColE ColF
A 1.0 a b 23 45 2.7
B 3.0 c q 26 34 5.9
C 5.0 f r 2 4.9 15.9
D 7.0 e s 45 2 8
df2 =
CCOL ColA ColB ColE ColP ColR ColS
A 1.0 a 45 vq 4 21.7
AF 7.0 za 7.9 r 4 3.1
D 7.0 e 2 gh 3 53.1
GK 8.0 ut 2 qt 4 33.3
所以我正在寻找的这两个数据帧的最终输出是这样的:
final_df =
CCOL ColA ColB ColC ColD ColE ColF ColP ColR ColS
A 1.0 a b 23 45 2.7 vq 4 21.7
D 7.0 e s 45 2 8 gh 3 53.1
我试过了
newdf = pd.merge(df1,df2,on='CCOL', how='inner')
但是,这个在新的 df 中从同一列创建 ColA_x、ColA_y 等,我不需要。
我的尝试:,
newdf = df1.combine_first(df2)
但是,这会创建一个如下所示的数据框,它为具有 CCOL、“A”和“D”的行提供正确的数据,但对于 df1 和 df2 在 CCOL 上不匹配的列则完全错误。
newdf =
CCOL ColA ColB ColC ColD ColE ColF ColP ColR ColS
A 1.0 a b 23 45.0 2.7 vq 4.0 21.7
B 3.0 c q 26 34.0 5.9 r 4.0 3.1
C 5.0 f r 2 4.9 15.9 gh 3.0 53.1
D 7.0 e s 45 2.0 8.0 qt 4.0 33.3
所以不明白如何实现我的输出 final_df。任何帮助将不胜感激。
【问题讨论】:
-
使用
df1.merge(df2, on=['CCOL', 'ColA', 'ColB', 'ColE']) -
这能回答你的问题吗? Pandas Merging 101
-
有点不清楚。它创建
'ColA_x'和'ColA_y'的原因是因为没有它们是合并键,就不能保证它们是相同的(因此你需要单独的值)。但是,如果它们在之前的操作中可能被设计为始终应该是相同的,那么您实际上只需执行df1.merge(df2)即可获得所需的输出 -
这些都不能让我只得到带有 A & D 和所有列的 CCOl 行
-
@Stan 如果这些都不起作用,那么您需要提供实际代表您的问题的数据。如果你需要正确的答案。同样以您的示例为例,我的第一个评论答案和 ALollz 建议都有效。
标签: python pandas dataframe join merge