我有一个pandas数据框
import pandas as pd
import numpy as np
df = pd.DataFrame({
'x': ['a', 'b', 'c'],
'y': [1, 2, 2],
'z': ['f', 's', 's']
}).set_index('x')
我希望根据选择数组中索引(x
)的值选择行。
selection = ['a', 'c', 'b', 'b', 'c', 'a']
正确的输出结果可以通过以下使用
df.loc
来获得。out = df.loc[selection]
我遇到的问题是在大型数据框(2-7百万行)上,
df.loc
运行得很慢。有没有方法可以加快此操作?我曾经尝试使用 eval()
,但它似乎不适用于像这样的硬编码索引值列表。我也考虑过使用 pd.DataFrame.isin
,但这会错过重复值(只返回选择中每个唯一元素的一行)。
df.loc[list(set(selection))]
吗? - postelrich