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

Pandas如何按客户ID分组判断状态列值并生成对应新列

Pandas 按客户分组标记状态实现方案

需求说明:针对每个客户,只要其任意一条记录的Status为Confirmed,该客户所有行的新增列Customer Status都标记为Active,否则标记为Inactive。

最简实现代码

不需要写循环、不需要额外做表关联,直接用pandas内置的分组变换方法即可实现:

# 直接在原DataFrame上新增列即可
df['Customer Status'] = df.groupby('Customer ID')['Status'].transform(
    lambda group: 'Active' if group.eq('Confirmed').any() else 'Inactive'
)

逻辑解释

  • 首先以Customer ID为维度做分组,每个分组对应同一个客户的全部记录
  • 对每个分组的Status列做存在性判断:eq('Confirmed').any()会返回布尔值,表示组内是否存在状态为Confirmed的记录
  • transform方法会把每个分组计算得到的单值结果,自动广播填充到组内的每一行,保证同一个客户的所有行标记完全一致
  • 执行完上述代码后,输出结果和预期完全一致,不会改动原有两列的数值和顺序

可选等价实现

如果习惯先算映射表再赋值的写法,也可以用下面的代码,逻辑完全一致,超大数据集下性能表现相近:

# 先计算每个客户ID对应的状态
status_mapping = (
    df['Status'].eq('Confirmed')
    .groupby(df['Customer ID'])
    .any()
    .replace({True: 'Active', False: 'Inactive'})
)
# 按客户ID映射赋值到新列
df['Customer Status'] = df['Customer ID'].map(status_mapping)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:42:28