当前位置: 首页 > 知识库问答 >
问题:

按列表中的值筛选数据帧[重复]

袁亦
2023-03-14

有一个数据帧:

  df = pd.DataFrame({'c1':['a','b','c','d'],'c2':[1,2,3,4]})

c1  c2
0   a   1
1   b   2
2   c   3
3   d   4

以及熊猫系列:

list1 = pd.Series(['b','c','e','f'])

Out[6]:
0    a
1    b
2    c
3    e

如何创建包含c1在list1中的行的新数据帧。

输出:

c1  c2
0   b   2
1   c   3 

共有3个答案

牧献
2023-03-14

@JohnGalt和@COLDSPEED的答案都更加地道。请不要使用这些答案。它们旨在使pandasnumpyapi的其他部分变得有趣和具有说明性。

Alt 1
这是利用numpy.inad作为pd.Series.isin的代理

df[np.in1d(df.c1.values, list1.values)]

  c1  c2
1  b   2
2  c   3

Alt 2
使用设置逻辑

df[df.c1.apply(set) & set(list1)]

  c1  c2
1  b   2
2  c   3

Alt 3
使用pd.Series.str.match

df[df.c1.str.match('|'.join(list1))]

  c1  c2
1  b   2
2  c   3

许博易
2023-03-14

使用查询

In [1133]: df.query('c1 in @list1')
Out[1133]:
  c1  c2
1  b   2
2  c   3

或者,使用isin

In [1134]: df[df.c1.isin(list1)]
Out[1134]:
  c1  c2
1  b   2
2  c   3
归俊
2023-03-14

您可以使用df.isin

In [582]: df[df.c1.isin(list1)]
Out[582]: 
  c1  c2
1  b   2
2  c   3

或者,如果要修改切片,请使用df.loc

In [584]: df.loc[df.c1.isin(list1), :]
Out[584]: 
  c1  c2
1  b   2
2  c   3
 类似资料:
  • 若要用单个列过滤数据文件(DF),如果我们考虑有男性和女性的数据,我们可以: 问题1——但如果数据跨越多年,而我只想看到2014年的男性会怎样? 在其他语言中,我可能会这样做: (除非我想这样做并在新的dataframe对象中获取原始dataframe的子集) 问题2。我如何在一个循环中实现这一点,并为每个独特的年份和性别集(即:2013年男性、2013年女性、2014年男性和2014年女性)创建

  • 我想过滤熊猫DataFrame,它从DataFrame中过滤掉除值中声明的行之外的所有其他列。我如何才能做到这一点并获得预期输出。 预期输出:

  • 我正在尝试筛选将< code>None作为行值的PySpark数据帧: 我可以使用字符串值正确过滤: 但这失败了: 但是每一类都有明确的价值。这是怎么回事?

  • 我有一个Python pandas DataFrame: 我想把一些股票的所有行放在一起,比如。这意味着我想要这样的语法: 既然熊猫不接受上述命令,如何达到目标?

  • 我有一个,如下所示: 我试图创建一个新的数据帧的基础上过滤前一个数据帧的行匹配的值列表。我已经尝试了下一段代码: 但是我犯了一个错误。我期待着下一个结果: 我正在寻找一种灵活的解决方案,它允许根据匹配列表中比示例中所示元素更多的元素进行筛选。

  • 这应该非常容易,但我无法让它工作。 我想根据两个或多个值筛选数据集。 这是否必须是一个或声明?我可以在SQL中使用?