簡體   English   中英

通過比較熊貓中的多列來選擇數據框

[英]Selecting dataframe by comparing multiple columns in pandas

我有一個 Pandas 數據框,想選擇某些列具有特定值的行。 例如,對於一列我試過這個:

df = pd.DataFrame({
    'subA': [54,98,70,91,38],
    'subB': [25,26,30,93,30],
    'subC': [43,89,56,50,48]})


a = df[df['subA'] == 70]
print(a)

輸出如下:

     subA  subB  subC
   2    70    30    56

這是意料之中的,也是完全可以理解的。 現在我想選擇前兩列具有特定值的行。 例如,我將代碼更改如下:

df = pd.DataFrame({
    'subA': [54,98,70,91,38],
    'subB': [25,26,30,93,30],
    'subC': [43,89,56,50,48]})

my_sub = ['subA', 'subB']
my_marks = [54, 25]


a = df[df[my_sub] == my_marks]
print(a)

我期待看到這樣的結果:

    subA  subB  subC
 1    54    25    43

但相反,輸出充滿了 NaN 值,我不清楚:

     subA  subB  subC
0  54.0  25.0   NaN
1   NaN   NaN   NaN
2   NaN   NaN   NaN
3   NaN   NaN   NaN
4   NaN   NaN   NaN

我在這里缺少什么以獲得所需的輸出? 我也試過 .loc 和 iloc 但這些都沒有幫助。

您可以使用all使布爾索引成為可能

df[(df[my_sub] == my_marks).all(axis=1)]
   subA  subB  subC
0    54    25    43

或者像@ansev 所說的那樣使用eqall

df[df[my_sub].eq(my_marks).all(axis=1)]
   subA  subB  subC
0    54    25    43

嘗試 :

df.loc[df.filter(my_sub).isin(my_marks).all(1)]

第一步是只選擇感興趣的列,使用isin函數獲取布爾值。 all函數僅獲取完全為 True 的行,然后您可以索引原始數據幀以獲得結果

       subA subB    subC
   0    54   25      43

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM