我在熊貓工作,我想跨多個字段應用多個過濾器到數據框。熊貓:多列過濾
我正在處理另一個更復雜的數據框,但我正在簡化這個問題。下面是一個簡單的數據幀的設置:
dates = pd.date_range('20170101', periods=16)
rand_df = pd.DataFrame(np.random.randn(16,4), index=dates, columns=list('ABCD'))
應用一個過濾器,以該數據幀是有據可查的,簡單的:
rand_df.loc[lambda df: df['A'] < 0]
由於拉姆達看起來像一個簡單的布爾表達式。很容易做到以下幾點。這不起作用,因爲它不是一個布爾表達式,而是可調用的。這些不能作爲布爾表達式:
rand_df.loc[lambda df: df['A'] < 0 and df[‘B’] < 0]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-31-dfa05ab293f9> in <module>()
----> 1 rand_df.loc[lambda df: df['A'] < 0 and df['B'] < 0]
我發現有兩種方法可以成功實現這一點。我會將它們添加到潛在的答案中,以便您可以直接對其作出解答。但是,我想徵求其他方法,因爲我不確定這些方法是否是過濾熊貓數據幀的非常標準的方法。
聯合國重複的加速評估。然而它並不像這個那樣乾淨。這個問題有一些多餘的背景,例如數據是從CSV讀入的。這是一個乾淨的例子,您可以將代碼直接粘貼到您自己的REPL中,提出答案併發布。在很短的時間內,這個問題比重複的候選人有更多的答案。因此,我認爲重新開放是有道理的。 –
問題是完全一樣的,重複的答案是由熊貓的創建者編寫的,所以我認爲它是一個安全的選擇,那是過濾數據框的最佳方式。 – DJK
謝謝。謙虛地指出,我應該特別考慮Wes McKinney回答的熊貓問題。 –