gpt4 book ai didi

python - np.where 数据框列 .isin 数据框列

转载 作者:行者123 更新时间:2023-12-01 08:18:42 26 4
gpt4 key购买 nike

我有一个数据框:

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):

TEL1 TEL2 TEL3 NAME
0 10 12 11 Ben
1 18 14 Ben
2 12 Ben
3 10 17 21 Ben
4 23 Ben
5 18 15 Ben
6 15 13 19 Ben

这可能不是实现我所追求的目标的最有效方法,但我理解代码想要做什么。如果有更有效的方法,将不胜感激。谢谢!

最佳答案

IIUC 这应该可以解决你的整个问题。一个数字在整个框架中只能出现一次。

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

关于python - np.where 数据框列 .isin 数据框列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54819412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com