You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 07:57:01