gpt4 book ai didi

python - Pandas :使用列表的子集数据框,多次保留重复项

转载 作者:行者123 更新时间:2023-12-05 03:02:16 31 4
gpt4 key购买 nike

我有一个包含重复值的大列表,我希望使用列表值对数据框进行子集化。通常我会使用 .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 方法相比,这是非常慢的。添加此编辑以便可以创建预期的输出。

最佳答案

IIUC,使用pandas.concat列表理解:

df_new = pd.concat([df[df['c'].eq(x)] for x in lst], ignore_index=True)

另一种方法是在列表中使用 value_counts 方法创建一个帮助器 Series 并使用 减少原始 DataFrame 大小过滤.isin 方法:

s = pd.Series(lst).value_counts()
df = df[df['c'].isin(set(lst))]

idx = np.concatenate([df[df['c'].eq(i)].index.repeat(r) for i, r in s.iteritems()])

df_new = df.loc[idx]

关于python - Pandas :使用列表的子集数据框,多次保留重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55040936/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com