Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将DataFrame query()方法与isin()组合_Python_Pandas_Dataframe - Fatal编程技术网

Python 将DataFrame query()方法与isin()组合

Python 将DataFrame query()方法与isin()组合,python,pandas,dataframe,Python,Pandas,Dataframe,因此,我想使用isin()方法和df.query(),在列表中选择id的行:id\u list。以前也曾问过类似的问题,但他们使用了典型的df[df['id'].isin(id\u list)]方法。我想知道是否有办法改用df.query() df = pd.DataFrame({'a': list('aabbccddeeff'), 'b': list('aaaabbbbcccc'), 'c': np.random.randint(5, size=12),

因此,我想使用
isin()
方法和
df.query()
,在列表中选择
id
的行:
id\u list
。以前也曾问过类似的问题,但他们使用了典型的
df[df['id'].isin(id\u 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')
这似乎有效:

>>> 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
是否更清楚是个人喜好的问题。

来自for
查询

您可以引用变量 在环境中,使用“@”字符作为前缀,如
@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

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

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

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

你坚持查询的动机是什么?你有什么样的数据吗?你试过什么?只是觉得写
df
两次或更多次都很乏味。根据,似乎不能将列表的名称放在引号内。包dplyr for R就是一个很好的例子,在此之后您只需要指定列名称。有趣的是,为什么您会想到这个想法?我不同意这种方法,因为它只适用于较小的
id\u列表
长度。如果您的
id\u列表
有100万个元素呢?