如何将DataFrame每行处理后折叠为带有序新列的单行(内存友好)
问题:超大型DataFrame的内存高效处理方案
我有一个1600万行、24列的大型DataFrame,需要对每行执行以下操作:
- 将该行转置为24行
- 与另一个DataFrame(df2)合并
- 将合并后的24行折叠为带有原行索引的单行
- 最终将所有处理后的行重新组合为新DataFrame,用于Kmeans聚类
我不介意操作耗时,但非常担心出现内存错误。
现有数据结构
df(含因子化值)
0 1 2 3 index 0 1 2 3 4 1 1 2 3 5 ...
df2(因子化值对应的数据集)
factor 0 1 2 3 4 1 0.0 1.0 2.0 3.0 NaN 2 5.0 6.0 7.0 8.0 NaN 3 10.0 11.0 12.0 13.0 14.0 4 15.0 16.0 17.0 18.0 19.0 5 20.0 21.0 22.0 23.0 24.0 ...
当前尝试的代码
我已通过groupby按索引拆分每行:
spatial_row = df.groupby('index')
并通过循环将每个分组与df2合并:
for a in spatial_row: df = a[1].T.rename(columns=({df.columns[0]: 'factor'})) df_index = a[0] df.merge(df2, on='factor') df.drop('factor', axis=1, inplace=True)
中间结果与目标格式
处理后的中间数据结构(以index==1为例,实际为24行444列)
0 1 2 3 4 0 0.0 1.0 2.0 3.0 NaN 1 5.0 6.0 7.0 8.0 NaN 2 10.0 11.0 12.0 13.0 14.0 3 20.0 21.0 22.0 23.0 24.0
折叠后的目标单行格式(每行含10656=444×24列)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 0.0 1.0 2.0 3.0 NaN 5.0 6.0 7.0 8.0 NaN 10.0 11.0 12.0 13.0 14.0 20.0 21.0 22.0 23.0 24.0
最终需要将处理后的单行以dict/series/list形式按原索引保存,组合成新的1600万行DataFrame。目前未找到内存高效的实现方式,向量化操作过于繁重,寻求可行方案。
内容的提问来源于stack exchange,提问作者Lev Zhitnik
相关产品推荐
相关产品推荐

