Gio*_*ano 4 python performance dataframe pandas
我有一个大型数据框,其中df包含. 我现在想创建一个由;中的元素索引的所有子数据帧的列表。具体来说indicesdf.indexindices
list_df = [df.loc[x] for x in indices]
Run Code Online (Sandbox Code Playgroud)
运行这个命令需要很长时间(df有大约3e6行和3e3唯一索引)。这是执行此操作的合理方法吗?我很高兴收到任何可以提高此问题及相关问题性能的意见或建议。
提前致谢!
您可以按groupby索引在对象中使用列表理解 -level=0更改sort=False默认排序以获得更快的解决方案:
L = [x for i, x in df.groupby(level=0, sort=False)]
Run Code Online (Sandbox Code Playgroud)
np.random.seed(123)
N = 1000
L = list('abcdefghijklmno')
df = pd.DataFrame({'A': np.random.choice(L, N),
'B':np.random.randint(10, size=N)}, index=np.random.randint(100, size=N))
In [273]: %timeit [x for i, x in df.groupby(level=0, sort=False)]
100 loops, best of 3: 9.91 ms per loop
In [274]: %timeit [df.loc[x] for x in df.index]
1 loop, best of 3: 417 ms per loop
Run Code Online (Sandbox Code Playgroud)