【问题标题】:Filter Pandas dataframe with another series用另一个系列过滤 Pandas 数据框
【发布时间】:2013-06-07 11:06:45
【问题描述】:

我有 Pandas 系列,我们将其称为approved_fields,我想用它来过滤df:

approved_field(['Field1','Field2','Field3')]

df
    Field
0   Field1
1   Field4
2   Field2
3   Field5
4   Field2

应用approved_field 过滤器后,生成的df 应如下所示:

    Field
0   Field1
1   Field2
2   Field2

谢谢!

【问题讨论】:

  • 标题需要修正。术语“数据框”和“系列”具有不适合在此问题中使用的技术定义。数据框不是一个系列。此外,您正在使用列表进行过滤,该列表既不是数据框也不是系列。

标签: python python-2.7 pandas


【解决方案1】:

请注意,您预期解决方案中的索引已关闭

In [16]: approved_field = ['Field1','Field2','Field3']

In [17]: df = DataFrame(dict(Field = ['Field1','Field4','Field2','Field5','Field2']))

In [18]: df
Out[18]: 
    Field
0  Field1
1  Field4
2  Field2
3  Field5
4  Field2

In [19]: df[df.Field.isin(approved_field)]
Out[19]: 
    Field
0  Field1
2  Field2
4  Field2

【讨论】:

  • 谢谢杰夫,我在我的 OP 中修复了这个问题
  • 正确答案,DSM 仅领先你 2 分钟!
  • 这就是他们对野兔和兔子的评价 :)
【解决方案2】:

您可以使用isin 和布尔索引:

>>> import pandas as pd
>>> df = pd.DataFrame({"Field": "Field1 Field4 Field2 Field5 Field2".split()})
>>> approved_fields = "Field1", "Field2", "Field3"
>>> df['Field'].isin(approved_fields)
0     True
1    False
2     True
3    False
4     True
Name: Field, dtype: bool
>>> df[df['Field'].isin(approved_fields)]
    Field
0  Field1
2  Field2
4  Field2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多