У меня большой массив данных с мультииндексом. Я хотел нарезать этот фрейм данных, используя довольно большой список. Ниже приведен пример кода. Эта операция занимает почти 10 секунд.
import pandas as pd
import numpy as np
df = pd.DataFrame(
{
"x": np.repeat(np.arange(10000), 50),
"y": np.repeat(np.arange(50), 10000),
"val": np.random.rand(50*10000)
}
).set_index(["x", "y"])
large_list = range(5000,10000)
slice = df.loc[(large_list, slice(None)),:] # Takes 10 seconds on my machine
Для сравнения, если я записываю этот фрейм данных в файл hdf и читаю его с условием where
, таким же, как моя операция нарезки, требуется только 1,5 секунды!
df.to_hdf("sample.hdf", key="df", append=True)
df1 = pd.read_hdf("sample.hdf", "df", where='x in large_list')
Есть ли более быстрый способ нарезки в памяти?