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]