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

如何使用Pandas按指定列分组后替换组内其他列的现有值

原有代码问题说明

  1. 聚合语法错误:agg 中每个字段的聚合规则只能接收「目标列名、聚合函数」两个参数,你在 course 的聚合规则里多写了 cohort_number 列名,属于语法错误
  2. 自定义聚合逻辑写法错误:graduated 的判断逻辑不能直接写 any(graduated="Yes"),需要单独封装成可调用的聚合函数
  3. 逻辑不符需求:agg 返回的是每个分组仅一行的聚合结果,无法直接替换原分组内所有行的值,应该用 transform 方法返回和原数据长度一致的转换结果,直接赋值到原列即可

解决方案代码

import pandas as pd

# 定义graduated列的聚合逻辑
def process_graduated(group):
    # 组内存在Y直接返回Y
    if 'Y' in group.values:
        return 'Y'
    # 否则返回组内最后一个值
    return group.iloc[-1]

# 按sid、year分组
grouped = df.groupby(['sid', 'year'])

# 直接对原df的对应列做转换赋值,单元素分组自动保持原值
df['cohort_number'] = grouped['cohort_number'].transform('last')
df['course'] = grouped['course'].transform('first')
df['graduated'] = grouped['graduated'].transform(process_graduated)

运行上述代码后得到的结果和你期望的输出完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:03