将pandas DataFrame query()方法与isin()结合使用

时间:2015-11-30 03:21:26

标签: python pandas dataframe

所以我想在isin()中使用df.query()方法,在列表中选择id行:id_list。之前曾问过类似的question,但他们使用了典型的df[df['id'].isin(id_list)]方法。我想知道是否有办法使用df.query()代替。

df = pd.DataFrame({'a': list('aabbccddeeff'), 'b': list('aaaabbbbcccc'),
                   'c': np.random.randint(5, size=12),
                   'd': np.random.randint(9, size=12)})

id_list = ["a", "b", "c"]

这会产生错误

df.query('a == id_list')

3 个答案:

答案 0 :(得分:15)

来自query的{​​{3}}

  

您可以参考变量       在环境中用前缀为'@'字符       @a + b

在你的情况下:

In [38]: df.query('a == @id_list')
Out[38]:
   a  b  c  d
0  a  a  3  4
1  a  a  4  5
2  b  a  2  3
3  b  a  1  5
4  c  b  2  4
5  c  b  1  2

答案 1 :(得分:15)

您还可以在查询字符串中包含该列表:

>>> df.query('a in ["a", "b", "c"]')

这与:

相同
>>> df.query('a in @id_list')

答案 2 :(得分:4)

这似乎有效:

>>> df.query('a == {0}'.format(id_list))
   a  b  c  d
0  a  a  4  1
1  a  a  0  7
2  b  a  2  1
3  b  a  0  1
4  c  b  4  0
5  c  b  4  2

是否更清楚是个人品味的问题。