使用另一个系列过滤 Pandas 数据框

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/17046823/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 20:54:03  来源:igfitidea点击:

Filter Pandas dataframe with another series

pythonpython-2.7pandas

提问by ChrisArmstrong

I have Pandas Series we'll call approved_fields which I'd like to use to filter a df by:

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

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

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

After applying the approved_field filter, the resulting df should look like:

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

    Field
0   Field1
1   Field2
2   Field2

Thanks!

谢谢!

回答by DSM

You can use isinand boolean indexing:

您可以使用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

回答by Jeff

Note that you indices in your expected solution are off

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

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