将pandas数据帧拆分为子数据帧列表的最快方法

时间:2017-10-10 13:24:17

标签: python performance pandas dataframe

我有一个大型数据框df,我在indices中有一个完整的df.index个唯一元素列表。我现在想要创建一个由indices中的元素索引的所有子数据框的列表;具体

list_df = [df.loc[x] for x in indices]

运行此命令需要很长时间(df有大约3e6行和3e3个唯一索引)。这是执行此操作的合理方法吗?我很乐意收到任何可以改善这一问题和相关问题的评论或建议。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以在groupby对象中使用列表推导 - level=0sort=False更改默认排序以获得更快的解决方案:

L = [x for i, x in df.groupby(level=0, sort=False)]
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