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

2024-10-01 17:37:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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方法,但是在整个'Checked'列中输出为False。你知道吗

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

Tags: 数据truesitedf1df2checkednodoctbz3901e
3条回答

另一种方法也使用np.ravel()anky_91's答案相同,但随后使用^{},后者可以更一般,但在具有更多列时不太容易展开:

df2['Checked'] = df2['Site_x'].str.cat(df2['Site_y']).str.contains('|'.join(df1.values.ravel()))
      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

^{}.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

你很接近:

df2['checked'] = df2.apply(lambda x: x.isin(df1.stack())).any(axis=1)

相关问题 更多 >

    热门问题