【发布时间】:2019-07-29 04:06:21
【问题描述】:
我有一个包含重复值的大列表,我希望使用列表值对数据框进行子集化。通常我会使用.isin 方法,但我想保留重复的行。下面是一些示例代码:
df = pd.DataFrame(np.array([[1, 2, 'car'], [4, 5, 'bike'], [1, 2, 'train'], [1, 2, 'car'], [1, 2, 'train']]),columns=['a', 'b', 'c'])
lst = ['car', 'bike', 'car', 'car']
所以我想在每次出现时返回一个包含所有行的数据框。每次列表中出现一个项目时,我都想返回相应的行。
在像上面这样的简单数据集上,我可以遍历列表并将返回的值附加到新的数据框,但在大型数据集上,这似乎需要很长时间。有什么建议吗?
编辑:所以 Chris 的建议有效,并提供了预期的输出:
pd.concat([df[df['c'].eq(x)] for x in lst])
但是,与处理更大数据时的 .isin 方法相比,使用循环非常慢。添加了此编辑,以便可以创建预期的输出。
【问题讨论】:
-
pd.concat([df[df['c'].eq(x)] for x in lst])- 你是这个意思吗? -
预期输出是什么?
标签: python pandas dataframe duplicates subset