我需要將數據框中的某些列作為一個整體進行比較,例如:df = pd.DataFrame({'A':[1,1,3],'B':[4,5,6]})#Select condition: If df['A'] == 1 and df['B'] == 4, then pick up this row. 對于這個簡單的例子,我可以使用以下方法:df.loc[(df['A']==1)&(df['B']==4),'A':'B']然而,實際上我的數據框有幾十列應該作為整體進行比較。如果我選擇列出所有解決方案,上述解決方案將非常非?;靵y。所以我認為如果把它們作為一個整體來與一個列表進行比較可能會解決這個問題:#something just like this:df.loc[df.loc[:,'A':'B']==[1,4],'A':'B')]沒有工作。所以我想出了一個想法,首先將所有需要的列組合成一個新列作為列表值,然后將這個新列與列表進行比較。后者已在Pandas 中解決:比較 Series 中的列表對象雖然一般我已經解決了我的情況,但我仍然想知道是否有更簡單的方法來解決這個問題?謝謝。
2 回答

智慧大石
TA貢獻1946條經驗 獲得超3個贊
您可以通過數據的 NumPy 數組表示來使用布爾掩碼:
df = pd.DataFrame({'A':[1,1,3],'B':[4,5,6]})
res = df[(df.loc[:, 'A':'B'].values == [1, 4]).all(1)]
print(res)
A B
0 1 4
在這種情況下,永遠不要將您的列組合成一系列列表。這是低效的,因為您將失去所有矢量化優勢,并且此后的任何處理都將涉及 Python 級循環。

慕后森
TA貢獻1802條經驗 獲得超5個贊
或[[]]用于獲取多列:
df[(df[['A','B']].values==[1,4]).all(1)]
演示:
>>> df = pd.DataFrame({'A':[1,1,3],'B':[4,5,6]})
>>> df[(df[['A','B']].values==[1,4]).all(1)]
A B
0 1 4
>>>
添加回答
舉報
0/150
提交
取消