我需要比较两个不同数据框中的两列,并需要如下所述的输出:
数据帧1:
file_id FileName
UC1 Action
UC1 Patient
UC1 Auth
UC1 DAO
UC1 Transaction
UC1 Validator
UC2 HCP
UC2 Personnel
UC2 Auth DAO
数据框2:
file_id FileName
UC0 Action
UC0 Patient
UC1 Auth
UC1 Bean
UC1 Validator
UC2 HCP
UC2 Auth DAO
以以下格式输出需求:
file_id FileName Output
UC0 Action No
UC0 Patient No
UC1 Auth Yes
UC1 Bean No
UC1 Validator Yes
UC2 HCP Yes
UC3 Auth DAO No
答案 0 :(得分:4)
将DataFrame.merge
与左联接和指示器一起使用:
mask = (df2.merge(df1,
on=['file_id', 'FileName'],
how='left',
indicator=True)['_merge'].eq('both'))
或将MultiIndex
与Index.isin
进行比较:
mask = (df2.set_index(['file_id', 'FileName']).index
.isin(df1.set_index(['file_id', 'FileName']).index))
并通过numpy.where
创建新列:
df2['Output'] = np.where(mask, 'Yes', 'No')
print (df2)
file_id FileName Output
0 UC0 Action No
1 UC0 Patient No
2 UC1 Auth Yes
3 UC1 Bean No
4 UC1 Validator Yes
5 UC2 HCP Yes
6 UC2 Auth DAO Yes