如何使用pandas按id值拆分出多个结构相同的子dataframe
Pandas 按id规则拆分DataFrame的高效实现方案
循环使用append方法效率低的核心原因是每次append都会生成全新的DataFrame副本,数据量越大内存拷贝开销越高,直接使用pandas原生的向量化分组操作即可实现秒级拆分。
实现逻辑
你需要的三个分组完全可以通过id的模运算映射到分组索引:
- id ∈ [1,4,7,10,13...] →
(id -1) % 3 = 0→ 对应列表索引0 - id ∈ [2,5,8,11...] →
(id -1) % 3 = 1→ 对应列表索引1 - id ∈ [3,6,9,12...] →
(id -1) % 3 = 2→ 对应列表索引2
直接通过groupby按上述映射规则分组,一次性生成所有子DataFrame列表即可。
代码示例
简洁版(无需新增列)
import pandas as pd # df_raw 为你的原始DataFrame df_list = [ group.reset_index(drop=True) for _, group in df_raw.groupby((df_raw["id"] - 1) % 3, sort=True) ]
验证方法
执行完成后即可通过df_list[0]/df_list[1]/df_list[2]获取对应分组的DataFrame,同id的所有重复行都会保留在对应分组内。
性能优势
该方案全程使用pandas底层C优化的向量化操作,千万行级数据拆分也能在秒级完成,比循环append的实现效率高100倍以上。
内容的提问来源于stack exchange,提问作者Undertaker2
相关产品推荐
相关产品推荐

