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

请求协助:使用Pandas Groupby为DataFrame创建计算列

使用Pandas Groupby创建计算列的解决方案

结合你提供的relevant_URT_data数据示例,我整理了几个实用的分组计算列实现方案,你可以根据实际需求调整:

1. 按分组统计URT的出现次数/占比

如果想按ResCat分组,统计每个分组内test列等于URT的记录数(或占比),并将结果映射回原DataFrame的每一行:

import pandas as pd

# 新增分组内URT计数列
relevant_URT_data['urt_count_in_rescat'] = relevant_URT_data.groupby('ResCat')['test'].transform(
    lambda x: (x == 'URT').sum()
)

# 新增分组内URT占比列(URT记录数/分组总记录数)
relevant_URT_data['urt_ratio_in_rescat'] = relevant_URT_data.groupby('ResCat')['test'].transform(
    lambda x: (x == 'URT').mean()
)

2. 按分组计算Number列的聚合值

如果需要基于ResCat分组,将每个分组的Number列均值、总和等聚合结果作为新列:

# 分组计算Number列的均值
relevant_URT_data['rescat_number_mean'] = relevant_URT_data.groupby('ResCat')['Number'].transform('mean')

# 分组计算Number列的总和
relevant_URT_data['rescat_number_sum'] = relevant_URT_data.groupby('ResCat')['Number'].transform('sum')

3. 标记分组内是否存在URT记录

如果想给每行标记它所在的ResCat分组是否包含至少一条URT记录:

relevant_URT_data['has_urt_in_rescat'] = relevant_URT_data.groupby('ResCat')['test'].transform(
    lambda x: any(x == 'URT')
).astype(int)  # 转换为0/1的整数格式,方便后续分析

4. 多维度分组的自定义计算

如果需要更复杂的分组逻辑(比如同时按ResCat和MRN分组),可以这样实现:

# 按ResCat+MRN联合分组,统计每个分组内test列非空的记录数
relevant_URT_data['non_nan_test_count'] = relevant_URT_data.groupby(['ResCat', 'MRN'])['test'].transform(
    lambda x: x.notna().sum()
)

小提醒

  • transform方法是核心,它能将分组聚合的结果广播回原DataFrame的每一行,保证行数不变,完美适配“给原表加计算列”的需求
  • 如果只需要分组后的聚合结果(不需要保留原行结构),直接用groupby().agg()即可,但要加计算列的话优先用transform
  • 你可以随时替换分组键(比如把ResCat换成其他列)和聚合逻辑,适配自己的业务场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:09:32