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

如何在Pandas中按id分组为每个组新增相同值的新列

问题原因

你写的代码存在两个核心问题:

  1. df_interim['id'].apply(lambda _: uuid.uuid4()) 是逐行调用uuid.uuid4(),同一个id对应的每一行都会生成全新的uuid,自然不会相同
  2. pandas的DataFrame.append() 不是原地修改方法,你直接调用df_complete.append(df_interim)不会修改df_complete本身,循环结束后它还是空DataFrame

最优解决方法

推荐使用groupby+transform的向量化写法,无需显式循环,效率更高,一行即可实现需求:

import uuid
import pandas as pd

df['uuid'] = df.groupby('id')['id'].transform(lambda _: uuid.uuid4())

groupby会把相同id的行归为一组,每组仅调用一次lambda生成uuid,整组所有行都会复用这个uuid,完全符合你的要求。

原始循环写法的修正版

如果你要保留循环写法,需要调整为每个id仅生成一次uuid,并且用concat合并结果:

import uuid
import pandas as pd

df_list = []
for new_id in df['id'].unique():
    # 加copy避免pandas链式赋值警告
    df_interim = df[df['id'] == new_id].copy()
    # 每个id仅生成一次uuid
    df_interim['uuid'] = uuid.uuid4()
    df_list.append(df_interim)
# 合并所有分组得到最终结果
df_complete = pd.concat(df_list, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:54:03