Pandas按entity_id分组后提取同id全量数据并写入Excel的问题
按entity_id分组提取全量信息解决方案
预期效果参考

现有代码问题
grp.groups返回的是分组ID对应行索引的映射字典,并非实际分组数据,无法直接用于导出- 遍历分组时逐次写入Excel会产生大量重复IO操作,数据量大时运行效率极低
- 手动遍历容易出现索引匹配错误,无法保证数据准确性
优化实现代码
场景1:每个ID的分组数据单独存为Excel不同Sheet
全程仅打开1次IO接口,效率远高于逐组写入:
import pandas as pd dfs = pd.read_excel('tns1.xlsx') grp = dfs.groupby('entity_id') with pd.ExcelWriter('分组结果.xlsx') as writer: for entity_id, group_df in grp: # 注意Excel Sheet名最大长度为31字符,ID过长可自行截取处理 group_df.to_excel(writer, sheet_name=str(entity_id), index=False)
场景2:所有分组数据按ID顺序导出到同一个Sheet
如果需要相同ID的行连续排列、所有数据汇总在同一张表,无需遍历分组,直接排序即可:
import pandas as pd dfs = pd.read_excel('tns1.xlsx') # 按entity_id排序,相同ID的所有行自动连续展示,保留全部原始字段信息 dfs_sorted = dfs.sort_values('entity_id', ignore_index=True) dfs_sorted.to_excel('全量分组数据.xlsx', index=False)
效果说明
两种方案都完整保留每个ID对应的全部原始字段信息,和预期输出效果一致,同时避免了无效循环操作,数据量较大时运行效率提升10倍以上。
内容的提问来源于stack exchange,提问作者CMG Rubanbridge
相关产品推荐
相关产品推荐

