如何在Pandas中按id分组为每个组新增相同值的新列
问题原因
你写的代码存在两个核心问题:
df_interim['id'].apply(lambda _: uuid.uuid4())是逐行调用uuid.uuid4(),同一个id对应的每一行都会生成全新的uuid,自然不会相同- 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
相关产品推荐
相关产品推荐

