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万个元素呢?