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

Python pandas按id分组后按条件生成新列的实现方法

实现方案

你可以使用groupby()+transform()实现需求,transform会返回与原DataFrame长度一致的序列,可直接赋值为新列,不需要额外对齐索引。

你之前尝试的filter方法作用是筛选符合条件的分组,仅返回匹配条件的行,无法直接生成全量的新列,transform是这类分组映射需求的首选方法。

完整可运行代码

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'id': ['x1', 'x1', 'x2', 'x2', 'x3'],
    'group': ['A', 'B', 'A', 'A', 'B']
})

# 生成new_group列
df['new_group'] = df.groupby('id')['group'].transform(
    lambda x: 'two' if x.nunique() == 2 else x.iloc[0] if x.nunique() == 1 else 'B'
)

print(df)

逻辑说明

按id分组后,对每组的group列做判断:

  • 唯一值数量等于2时,返回字符串two
  • 唯一值数量等于1时,返回该组唯一的group值(这里取第一个位置的值即可)
  • 其余情况返回B
  • transform会将每组的返回值自动映射到该组的所有行上,不需要额外处理索引对齐

运行后输出结果和你期望的完全一致:

id group new_group
0  x1     A       two
1  x1     B       two
2  x2     A         A
3  x2     A         A
4  x3     B         B

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:54:02