Python 使用不同长度的布尔序列从dataframe中选择行

Python 使用不同长度的布尔序列从dataframe中选择行,python,pandas,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”列。它将布尔变量指定给“否”值,如下所示: s = pd.Series([True, False, Tr

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

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”列。它将布尔变量指定给“否”值,如下所示:

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

0     True
1    False
2     True
3     True
dtype: bool
我想从数据帧中选择那些行,其中序列中的“No”值为True。这将导致

  No   piece
2   2  piece3
3   3  piece4

我已经尝试了很多使用df[“No”]的索引。isin(s),或者类似于df[s[“No”]==True]的东西。。。但是它还不起作用。

我认为您需要
No
列中的值映射到
true/false
条件,并将其用于子集设置:

df[df.No.map(s)]

#  No   piece
#2  2   piece3
#3  3   piece4


您正试图使用
df['No']
索引到
s
,然后将结果用作
df
本身的掩码:

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

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

是否正在查找
df[s]
?@Psidom。我会说,把它变成一个答案,但你不应该用另一个问题来回答一个问题,除非你需要提高你的角色数量:)不,但我看到我的例子是这样的。问题是在df中,多行可能具有相同的“No”值,并且该值与索引不同。我将编辑我的问题,以便更好地代表实际问题。@KoraK这听起来完全符合你的要求。“我想从数据帧中选择那些行,其中序列中的“No”-值为True”。而且,您(编辑过的)预期输出与该语句相矛盾。@Cleb:
s
中有三个
True
s。0并不重要,因为df中没有任何一行的“no”=0,并且有两行的“no”分别为2和3,应该返回它们。我认为您需要
df[s[df['no']]]。value]
。这是一个错误。但不是我的反对票。这是一个更宽泛的答案。“我很高兴OP选择了这个。”谢谢你们。这两个答案都符合OP的目的。
df[s[df['No']].values]