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

2024-05-16

我有一个大数据框df我有完整的清单indices中的独特元素df.index。我现在想创建一个由元素索引的所有子数据帧的列表indices;具体来说

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

运行这个命令需要很长时间(df有大约3e6行,以及3e3唯一索引)。这是执行此操作的合理方法吗?我很高兴收到任何可以提高此问题及相关问题性能的意见或建议。

提前致谢!


您可以使用列表理解groupby http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.groupby.html按索引的对象 -level=0, sort=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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐