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

Pandas按id列分组为每个组添加多条带编号行的实现方法

问题原因分析

你使用的df.groupby('id').assign(new_col=range(2020, 2022))无法生效的核心原因是:DataFrameGroupBy对象调用assign时,要求赋值的序列长度必须和每个分组的行数完全对齐。你的每个id分组只有1行数据,传入长度为2的年份序列,无法匹配行数,因此不会得到预期结果。

正确实现方案

方案1:笛卡尔合并(适用于id为唯一值的场景,效率更高)

如果你的df中id确实是唯一标识符,每行对应唯一id,直接构造目标值的序列后做笛卡尔合并即可,代码最简洁运行速度也最快:

import pandas as pd

# 构造你需要的new_col取值序列,可任意修改长度和取值
new_col_vals = pd.DataFrame({'new_col': range(2020, 2022)})
# 笛卡尔合并后每个原行都会和所有new_col取值配对,生成对应行数
df = df.merge(new_col_vals, how='cross')

方案2:分组生成(适用于id重复或不同id要生成不同new_col的场景,更灵活)

如果需要按id分组做自定义逻辑的新值生成,可以用groupby.apply配合explode实现:

df = df.groupby('id', group_keys=False).apply(
    lambda group: group.assign(new_col=[range(2020, 2022)]).explode('new_col')
)

如果不同id需要生成不同的new_col取值范围,只需要修改lambda内的列表生成逻辑即可。

效果验证

假设你的原df结构如下:

idother_col
1测试值1
2测试值2

两种方案运行后都会得到预期结果:

idother_colnew_col
1测试值12020
1测试值12021
2测试值22020
2测试值22021

内容的提问来源于stack exchange,提问作者Arturo Sbr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:36:02