按ColA分组计算ColB值与组内ColB中位数比值并生成新列的实现方法
实现方案
- 核心用Pandas的
groupby+transform组合实现,transform会把分组聚合得到的中位数,自动匹配到对应分组的每一行,不用额外做表关联 - 用原
ColB列的值除以对应分组的中位数,保留两位小数即可得到新列ColC
可直接运行的代码
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ 'ColA': ['grp1', 'grp1', 'grp1', 'grp1', 'grp2', 'grp2', 'grp2', 'grp2', 'grp3', 'grp3', 'grp3', 'grp3'], 'ColB': [2, 10, 8, 22, 6, 14, 12, 32, 10, 20, 30, 6] }) # 核心计算逻辑 df['ColC'] = (df['ColB'] / df.groupby('ColA')['ColB'].transform('median')).round(2) # 打印输出结果 print(df)
结果说明
代码自动计算的分组中位数和给定数值完全一致:grp1中位数9.0、grp2中位数13.0、grp3中位数15.0,最终输出的ColC比值精度也和预期输出完全匹配。
内容的提问来源于stack exchange,提问作者dmd7
相关产品推荐
相关产品推荐

