关于python:过滤列表中元素的Pandas DataFrame

Filter Pandas DataFrame for elements in list

本问题已经有最佳答案,请猛点这里访问。

我有一个包含值和附加信息的熊猫数据帧。我希望能够提取只属于一种信息的值。我不知道前面会查询哪些值以及多少值。因此,可能只调用一次带有附加信息"foo"的值,有时使用附加信息"bar"和"baz",因此使用简化的数据帧

1
2
3
import pandas as pd
df = pd.DataFrame(
    [[1, 'foo'], [2, 'bar'], [3, 'baz']], columns=['value', 'id'])

我试过了

1
result = df[df.id in ['foo', 'bar']]

但我只得到一个值错误:一个序列的真值是模糊的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。但是我不能让any()-函数给我结果….


使用isin根据传入列表测试列的成员身份:

1
2
3
4
5
6
7
In [30]:
df[df['id'].isin(['foo','bar'])]

Out[30]:
   value   id
0      1  foo
1      2  bar

这里,isin生成一个布尔掩码,我们使用它来过滤df:

1
2
3
4
5
6
7
8
In [31]:    
df['id'].isin(['foo','bar'])

Out[31]:
0     True
1     True
2    False
Name: id, dtype: bool