如何将pandas DataFrame按每n个作者为一组拆分为多个子数据集
按指定N位作者拆分DataFrame实现方法
核心实现代码
import pandas as pd # 原有初始化逻辑 df.set_index(keys=['B'], drop=False, inplace=True) authors = df['B'].unique().tolist() # 可自由调整每组作者数量 n = 2 dgroups = [] # 按n个一组拆分去重后的作者列表 author_groups = [authors[i:i+n] for i in range(0, len(authors), n)] # 生成对应分组的子DataFrame for group in author_groups: # 批量筛选当前组所有作者的全部记录,效率远高于逐作者拼接 sub_df = df[df['B'].isin(group)].reset_index(drop=True) dgroups.append(sub_df)
原有代码问题说明
- 第一版代码误用
extend()方法:extend()会迭代传入的DataFrame对象,将列名作为独立元素添加到列表中,导致结果结构异常,对应位置应使用append()添加完整子DataFrame - 补充版本手动定义临时变量拼接子DataFrame,扩展性差,N值增大时代码冗余度会大幅上升,使用
isin()批量匹配可适配任意大小的N值
扩展功能:批量导出CSV
for idx, sub_df in enumerate(dgroups): # 自定义导出文件名,encoding参数保证中文正常显示 sub_df.to_csv(f"作者分组_{idx+1}.csv", index=False, encoding='utf-8-sig')
可选调整规则
如果要求每组必须满N位作者,不足N个的最后一组直接舍弃,可将作者分组代码修改为:
author_groups = [authors[i:i+n] for i in range(0, len(authors) - len(authors)%n, n)]
内容的提问来源于stack exchange,提问作者TestUser1
相关产品推荐
相关产品推荐

