2017-06-14 54 views
0

我想刪除的是小於10,大於25我的樣本數據幀的行會看起來像這樣熊貓放棄與值小於給定值的行

a b c 
1 2 3 
4 5 16 
11 24 22 
26 50 65 

預期輸出:

a b c 
1 2 3 
4 5 16 
26 50 65 

因此,如果該行具有小於10或大於25的任何一個值,則該行將保留在數據幀中,否則需要將其丟棄。

有什麼辦法可以通過熊貓來實現,而不是遍歷所有的行?

+0

好運。我希望你能照顧好你的行。 –

+1

就像一個供參考,這不是你如何問SO的問題。你應該表現出一些最小的努力。如果你有資源在這裏提出問題,你有資源做一些自我檢索。 –

+0

爲什麼第一行和最後一行仍然在您的預期輸出中?這沒有任何意義。 –

回答

1

您可以撥打apply並將結果返回到名爲'Keep'的新列。然後,您可以使用此列刪除不需要的行。

import pandas as pd 
l = [[1,2,3],[4,5,6],[11,24,22],[26,50,65]] 
df = pd.DataFrame(l, columns = ['a','b','c']) #Set up sample dataFrame 

df['keep'] = df.apply(lambda row: sum(any([(x < 10) or (x > 25) for x in row])), axis = 1) 

any()函數返回一個生成器。調用sum(generator)只是返回存儲在生成器中的所有結果的總和。

檢查this關於any()如何工作。 Apply函數仍然像for循環一樣迭代所有行,但代碼看起來更清晰。我無法想象如何在不遍歷所有行的情況下執行此操作。

輸出:

a b c keep 
0 1 2 3  1 
1 4 5 6  1 
2 11 24 22  0 
3 26 50 65  1 


df = df[df['keep'] == 1] #Drop unwanted rows 
+0

謝謝拉克什。這對我有效。 –

+0

很棒的回答!我是熊貓新手,想知道這是否更有效地「循環」數據框。我不知道熊貓的數據框是如何在引擎下實現的,但這似乎是兩次迭代它。 請問我可以給我一些解釋嗎? – mimre

+0

應用函數只是循環的語法糖。即使你編寫了一個for循環遍歷所有行,我也不確定是否有辦法動態刪除行。 –