繁体   English   中英

基于两列Python Panda区别两个数据框

[英]Difference two dataframes based on two columns Python Panda

Df1 

 A B C
 1  1 'a'
 2  3 'b'
 3  4 'c'

Df2
  A  B  C
  1  1 'k'
  5  4 'e'

预期输出(在Df1和Df2求和并合并之后),即Df1-Df2然后合并

output 

     A B C
     1  1 'a'
     2  3 'b'
     3  4 'c'
     5  4 'e'

区别应基于两列A和B,而不是所有三列。 我不在乎Df2和Df1中的C列。

尝试这个:

In [44]: df1.set_index(['A','B']).combine_first(df2.set_index(['A','B'])).reset_index()
Out[44]:
   A  B    C
0  1  1  'a'
1  2  3  'b'
2  3  4  'c'
3  5  4  'e'

这是一个外部联接,如果在df1中不知道值,则从df2合并到列C中:

dfx = df1.merge(df2, how='outer', on=['A', 'B'])
dfx['C'] = dfx.apply(
     lambda r: r.C_x if not pd.isnull(r.C_x) else r.C_y, axis=1)
dfx[['A', 'B', 'C']]
=>
   A  B  C
0  1  1  a
1  2  3  b
2  3  4  c
3  5  4  e

使用concat和drop_duplicates:

output = pd.concat([df1, df2])
output = output.drop_duplicates(subset = ["A", "B"], keep = 'first')

*所需的df:*

   A  B  C
0  1  1  a
1  2  3  b
2  3  4  c
1  5  4  e

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM