2017-02-22 79 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。 –

相关问题