2017-02-22 38 views
3

選擇行我有一個數據幀,看起來像這樣:使用布爾一系列不同的長度,以從數據幀

df = pd.DataFrame({"piece": ["piece1", "piece2", "piece3", "piece4"], "No": [1, 1, 2, 3]}) 

    No piece 
0 1 piece1 
1 1 piece2 
2 2 piece3 
3 3 piece4 

我有對應的數據框「否」 -column的指數系列。它布爾變量分配給「否」 - 值,就像這樣:

s = pd.Series([True, False, True, True]) 

0  True 
1 False 
2  True 
3  True 
dtype: bool 

我想從在該系列中的「無」值是真實的數據框選擇那些行。這將導致

No piece 
2 2 piece3 
3 3 piece4 

我已經嘗試了很多索引的使用df [ 「否」。ISIN(S),或類似DF [S [ 「否」] ==真] ...但它還沒有工作。

+2

你在找'df [s]'嗎? – Psidom

+0

@Psidom。我會說轉成一個答案,但你不應該回答與另一個問題的問題,除非你需要提高你的字符數:) –

+0

不,但我看到我的例子如何看起來如此。問題在於,在df中,多行可能具有相同的「否」值,並且該值與索引不同。我會編輯我的問題來更好地表達實際問題。 –

回答

3

我認爲你需要map值在No列到true/false條件和使用它的子集:

df[df.No.map(s)] 

# No piece 
#2 2 piece3 
#3 3 piece4 

df.No.map(s) 

# 0 False 
# 1 False 
# 2  True 
# 3  True 
# Name: No, dtype: bool 
+0

這是一個更爲pandathonic的答案。我很高興OP選擇了這個。 –

+0

@MadPhysicist謝謝。這兩個答案都適合OP的目的。 – Psidom

2

您試圖索引s使用df['No'],然後使用結果作爲df本身的掩碼:

df[s[df['No']].values] 

最終掩碼需要使用values作爲數組提取,因爲索引中的副本會導致錯誤,否則會導致錯誤。

+2

我認爲你需要'df [s [df ['No']]。values]'。這給出了一個錯誤。不是我投下的票。 – Psidom

+0

@Psidom。你是絕對正確的。 –

+1

已修復,希望能夠刪除downvote。 –

相關問題