检查一个数据框中某一列的值是否存在于数据框的其他行中。

5
假设我有如下数据框:
df = pd.DataFrame({'a':[1,2,3,4],'b':[2,3,4,5],'c':[3,4,5,6],'d':[5,3,2,4]})

我想检查列d中的元素是否存在于其对应的行中的其他位置。因此我想要的结果是:
[False, True, False, True]

为此,我使用了
df.apply(lambda x: x['d'] in x[['a','b','c']], axis=1)

但是这样给我的结果却是[False, False, False, False]

5个回答

3

请尝试:

out = (df[['a','b','c']].T==df['d']).any()

输出:

0    False
1     True
2    False
3     True
dtype: bool

2
利用numpy广播,您可以轻松地实现它:
(df[['d']].to_numpy() == df.to_numpy())[:, :-1].any(axis=1)

输出:

array([False,  True, False,  True])

使用numpy可以达到最快的速度。

2
使用eq函数,在列之间广播相等比较。然后检查行中是否有任何匹配项。请参考以下链接:eqany
df.drop(columns='d').eq(df['d'], axis=0).any(axis=1).array
<PandasArray>
[False, True, False, True]
Length: 4, dtype: bool

就速度而言,numpy选项是最佳选择。


0
需要添加“values”:
df.apply(lambda x: x['d'] in x[['a','b','c']].values, axis=1)
Out[11]: 
0    False
1     True
2    False
3     True
dtype: bool

你输入的是检查 x['d'] 是否在 x[['a','b','c']] 的集合中,而不是值。字典的工作方式类似:

1 in {'a': 1, 'b': 2}
Out[30]: False
1 in {'a': 1, 'b': 2}.values()
Out[31]: True

0

尝试使用

df.eq(df.pop('d'),axis=0).any(1)#.values
0    False
1     True
2    False
3     True
dtype: bool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接