假設我有一個如下的資料框:
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]。
uj5u.com熱心網友回復:
Try:
out = (df[['a','b','c']].T==df['d']).any()
Output:
0 False
1 True
2 False
3 True
dtype: bool
uj5u.com熱心網友回復:
使用eq跨列廣播相等性比較。然后檢查行中是否有任何匹配項:
df.drop(columns='d').eq(df['d'], axis=0).any(axis=1).array
<PandasArray>
[False, True, False, True]
Length: 4, dtype: bool
Speedwise,最好使用 numpy 選項。
uj5u.com熱心網友回復:
利用 numpy 廣播,您可以輕松做到:
(df[['d']].to_numpy() == df.to_numpy())[:, :-1].any(axis=1)
輸出:
array([False, True, False, True])
使用 numpy 的速度與您所能獲得的一樣快。
uj5u.com熱心網友回復:
試試
df.eq(df.pop('d'),axis=0).any(1)#.values
0 False
1 True
2 False
3 True
dtype: bool
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/390550.html
