Skip to main content
 首页 » 编程设计

python之检查一个数据框的任何值(多列)是否存在于另一个数据框的任何值(多列)中

2025年05月04日15落叶无声

我有两个具有不同格式的相似数据的数据框

df1:

Nodo      X          Y          Z 
CTB3901   CTBX3901   CTBY3901   CTBZ3901 
MTR5331   MTRX5331   MTRY5331   MTRZ5331 
ADC3451   ADCX3451   ADCY3451   ADCZ3451 

df2:

Site_x     Site_y 
CTBX3901E  CTBX3901 
CTB3901    CTB3901E 
CTBZ3901E  CTBZ3901 
CTBY3901E  CTB3901 
MADX6379E  MADX6379 

我想检查 df2['Site_x', 'Site_y'] 中的任何条目是否在 df1['Nodo','X','Y' 的任何列中,'Z']。数据不需要在两个帧中位于同一行。

检查后的最终输出如下

Site_x     Site_y   Checked 
CTBX3901E  CTBX3901  True 
CTB3901    CTB3901E  True 
CTBZ3901E  CTBZ3901  True 
CTBY3901E  CTB3901   True 
MADX6379E  MADX6379  False 

请原谅我笨拙的数据集。为了让这部分正确无误,我不得不粘贴我正在使用的相同数据。

我已经尝试使用以下语法的 isin 方法,但输出在整个“已检查”列中为 False。

df2['Checked'] = df2[['Site_x','Site_y']].isin(df1[['Nodo','X','Y','Z']]).any(axis=1) 

请您参考如下方法:

使用 np.ravel()使用 .isin():

df2['Checked']=df2.isin(df1.values.ravel()).any(axis=1) 
print(df2) 

      Site_x    Site_y  Checked 
0  CTBX3901E  CTBX3901     True 
1    CTB3901  CTB3901E     True 
2  CTBZ3901E  CTBZ3901     True 
3  CTBY3901E   CTB3901     True 
4  MADX6379E  MADX6379    False