2017-09-25 126 views
-1

我嘗試根據兩個條件(if,else)篩選我的熊貓數據框。只有if聲明有效。 if語句基於2個條件(logic1logic2)保留(標記)我的DataFrame中的所有記錄。參見第4節根據列值從熊貓數據框中排除記錄

else發言,我想排除已標記(logic1logic2)所有的ID,而無需創建一個額外的列表或遍歷每個記錄。有沒有辦法將所有這些記錄過濾掉而不將ID存儲在額外的列表中?

我只想使用過濾器功能,如果可能的話。目前我從第3部分獲得輸出。它是錯誤的,因爲id = 2已被標記,但仍包含在輸出中。我需要的輸出部4中顯示。

代碼

logic1 = (potatoes['Desc'] == 'Bla2') & (potatoes['Value'] == True) & (potatoes['Enabled'] == True) 
logic2 = (potatoes['Desc'].isin(['Bla8', 'Bla9'])) & (potatoes['Active'] == True) & (potatoes['Enabled'] == True) 

if flagged: 
    potatoes_flagged = potatoes[logic1 | logic2] 
    return potatoes_flagged 
else: 
    potatoes_not_flagged = potatoes[~logic1 & ~logic2] 
    return potatoes_not_flagged 

1.輸入(馬鈴薯)

id | Desc | Active | Enabled | Value | [A LOT OF OTHER COLUMNS] 
1 | Bla1 | 1  | 0  | 1  | [A LOT OF OTHER COLUMNS] 
2 | Bla2 | 1  | 1  | 1  | [A LOT OF OTHER COLUMNS] 
2 | Bla3 | 1  | 1  | 0  | [A LOT OF OTHER COLUMNS] 
2 | Bla4 | 0  | 0  | 0  | [A LOT OF OTHER COLUMNS] 
2 | Bla5 | 0  | 0  | 0  | [A LOT OF OTHER COLUMNS] 
3 | Bla6 | 1  | 1  | 0  | [A LOT OF OTHER COLUMNS] 
4 | Bla7 | 0  | 0  | 1  | [A LOT OF OTHER COLUMNS] 

2.輸出爲標記(如果)(CORRECT )

id | Desc | Active | Enabled | Value | [A LOT OF OTHER COLUMNS] 
2 | Bla2 | 1  | 1  | 1  | [A LOT OF OTHER COLUMNS] 

3.輸出不標記(否則)(錯)

id | Desc | Active | Enabled | Value | [A LOT OF OTHER COLUMNS] 
1 | Bla1 | 1  | 0  | 1  | [A LOT OF OTHER COLUMNS] 
2 | Bla3 | 1  | 1  | 0  | [A LOT OF OTHER COLUMNS] 
2 | Bla4 | 0  | 0  | 0  | [A LOT OF OTHER COLUMNS] 
2 | Bla5 | 0  | 0  | 0  | [A LOT OF OTHER COLUMNS] 
3 | Bla6 | 1  | 1  | 0  | [A LOT OF OTHER COLUMNS] 
4 | Bla7 | 0  | 0  | 1  | [A LOT OF OTHER COLUMNS] 

4.輸出需要未標記(正確)

id | Desc | Active | Enabled | Value | [A LOT OF OTHER COLUMNS] 
1 | Bla1 | 1  | 0  | 1  | [A LOT OF OTHER COLUMNS] 
3 | Bla6 | 1  | 1  | 0  | [A LOT OF OTHER COLUMNS] 
4 | Bla7 | 0  | 0  | 1  | [A LOT OF OTHER COLUMNS] 
+0

我想你需要'土豆[〜(logic1&logic2)]',但是你的期望輸出是錯誤的? –

+0

,因爲根據您的數據,id = 2永遠不會在此標記。 –

+0

我不明白爲什麼'id = 2'永遠不會被標記,並且'〜logic1&〜logic2'似乎是正確的。 – orangetacos

回答

1

它看起來像你想找到所有id s不會由potatoes[logic1 | logic2]返回。你可以使用一個倒置的isin調用來做到這一點。

idx_flagged = potatoes.loc[logic1 | logic2, 'id'].values 
potatoes[~potatoes.id.isin(idx_flagged)] 

    id Desc Active Enabled Value 
0 1 Bla1  1  0  1 
5 3 Bla6  1  1  0 
6 4 Bla7  0  0  1 
+1

謝謝你的回答。這回答了我的問題。 – orangetacos