使用不同长度的布尔系列从数据框中选择行

时间:2017-02-22 15:35:28

标签: python pandas

我有一个如下所示的数据框:

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

我有一个系列,其索引对应于数据框中的“No”列。它将布尔变量分配给“No”值,如下所示:

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

0     True
1    False
2     True
3     True
dtype: bool

我想从数据框中选择那些行,其中“No”-value为True。这应该导致

  No   piece
2   2  piece3
3   3  piece4

我用df [“No”]尝试了很多索引.isin(s),或类似df [s [“No”] == True] ......但它还没有用。

2 个答案:

答案 0 :(得分:4)

我认为您需要map Notrue/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
{ "index": { "_id": 1 }}
{ "text": "Sue ate the alligator" }
{ "index": { "_id": 2 }}
{ "text": "The alligator ate Sue" }
{ "index": { "_id": 3 }}
{ "text": "Sue never goes anywhere without her alligator skin purse" }

答案 1 :(得分:3)

您正尝试使用sdf['No']编入索引,然后将结果用作df本身的掩码:

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

需要使用values将最终掩码提取为数组,因为索引中的重复项会导致错误。