Python np.where dataframe column.isin dataframe column

Python np.where dataframe column.isin dataframe column,python,pandas,Python,Pandas,我有一个数据帧: TEL1 TEL2 TEL3 NAME 0 10 12 11 Ben 1 18 18 14 Ben 2 19 12 15 Ben 3 10 17 21 Ben 4 19 19 23 Ben 5 12 18 15 Ben 6 15 13 19 Ben 我的python代码的目的是删除TEL1与TEL2、TEL2与TEL3、TEL3与TEL1中存在的任何数字。在所有三列之间应该有唯一的数字 我正在使用在T

我有一个数据帧:

TEL1 TEL2 TEL3    NAME
0   10  12  11  Ben
1   18  18  14  Ben
2   19  12  15  Ben
3   10  17  21  Ben
4   19  19  23  Ben
5   12  18  15  Ben
6   15  13  19  Ben
我的python代码的目的是删除TEL1与TEL2、TEL2与TEL3、TEL3与TEL1中存在的任何数字。在所有三列之间应该有唯一的数字

我正在使用在TEL1和TEL2、TEL2和TEL3之间进行重复数据消除,该功能正常工作:

df['TEL1'] = np.where(df['TEL1'].isin(df['TEL2']), '', df['TEL1'])
df['TEL2'] = np.where(df['TEL2'].isin(df['TEL3']), '', df['TEL2'])
结果:

TEL1 TEL2 TEL3 NAME
0   10  12  11  Ben
1       18  14  Ben
2       12  15  Ben
3   10  17  21  Ben
4           23  Ben
5       18  15  Ben
6   15  13  19  Ben
但是,当我添加以下代码时,它不起作用,并显示与上面相同的输出:

df['TEL3'] = np.where(df['TEL3'].isin(df['TEL1']), '', df['TEL3'])
预期结果如下(删除TEL3列中的15个):


这可能不是实现我所追求的目标的最有效的方法,但我理解代码的意图。如果有更有效的方法,我们将不胜感激。谢谢

这应该能解决你的整个问题。数字在整个帧中只能出现一次

df.set_index('NAME', append=True).stack().drop_duplicates().unstack(2).reset_index(level=1)
输出:
为什么要删除15?从TEL3中删除15是因为它存在于TEL1中,即使它不在同一行中?那么您可能是在
df.set_index('NAME',append=True)。stack().drop_duplicates()。unstack(2)
每个数字都是唯一的,它会在整个字段集中删除重复项,然后重塑原形非常感谢你!这正是我想要的。非常感谢。
df.set_index('NAME', append=True).stack().drop_duplicates().unstack(2).reset_index(level=1)
  NAME  TEL1  TEL2  TEL3
0  Ben  10.0  12.0  11.0
1  Ben  18.0   NaN  14.0
2  Ben  19.0   NaN  15.0
3  Ben   NaN  17.0  21.0
4  Ben   NaN   NaN  23.0
6  Ben   NaN  13.0   NaN