比较两列Python Pandas数据帧的两列并获取公共行

Moh*_*lah 5 python dataframe pandas

我有2个Dataframe如下:

DF1=
    A    B   C    D
0   AA   BA  KK   0
1   AD   BD  LL   0
2   AF   BF  MM   0

DF2=
    K    L
0   AA   BA
1   AD   BF
2   AF   BF
Run Code Online (Sandbox Code Playgroud)

最后我想得到的是:

DF1=
    A    B   C    D
0   AA   BA  KK   1
1   AD   BD  LL   0
2   AF   BF  MM   1
Run Code Online (Sandbox Code Playgroud)

所以,我想比较两个数据帧,我想看看第一个数据帧的哪一行(对于列A和B)与第二个数据帧(列K和L)的共同点,并在第一个数据帧的库D上分配1.

我可以使用for循环,但对于大量条目来说它会非常慢.

任何线索或建议将不胜感激.

EdC*_*ica 13

如果您重命名列,这将更容易df2,然后您可以逐行比较:

In [35]:

df2.columns = ['A', 'B']
df2
Out[35]:
    A   B
0  AA  BA
1  AD  BF
2  AF  BF
In [38]:

df1['D'] = (df1[['A', 'B']] == df2).all(axis=1).astype(int)
df1
Out[38]:
    A   B   C  D
0  AA  BA  KK  1
1  AD  BD  LL  0
2  AF  BF  MM  1
Run Code Online (Sandbox Code Playgroud)


小智 6

df1['ColumnName'].isin(df2['ColumnName']).value_counts()
Run Code Online (Sandbox Code Playgroud)


Moh*_*lah 2

这就是我解决它的方法:

df1 = pd.DataFrame({"A":['AA','AD','AD'], "B":['BA','BD','BF']})
df2 = pd.DataFrame({"A":['AA','AD'], 'B':['BA','BF']})
df1['compressed']=df1.apply(lambda x:'%s%s' % (x['A'],x['B']),axis=1)
df2['compressed']=df2.apply(lambda x:'%s%s' % (x['A'],x['B']),axis=1)
df1['Success'] = df1['compressed'].isin(df2['compressed']).astype(int)
print df1

    A   B     compressed   Success
0  AA  BA      AABA          1
1  AD  BD      ADBD          0
2  AD  BF      ADBF          1
Run Code Online (Sandbox Code Playgroud)

  • 你的答案与原来的问题有什么关系? (3认同)
  • 但您想要的输出不是原始问题的内容,您应该更新您的问题或发布新问题 (2认同)