所以我想在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')
答案 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
是否更清楚是个人品味的问题。