如何使用pandas transform计算分组分位数并添加回原DataFrame
正确实现方法
你的代码报错是因为没有正确向transform传递带参数的quantile函数,同时直接将transform返回结果赋值给整个df会覆盖原表数据,正确操作有两种常用写法:
方法1:使用lambda匿名函数封装参数
适合需要自定义逻辑的场景,直接在lambda内调用quantile并传入分位参数:
# 直接给原df新增列,50分位数计算后保留3位小数 df['50th percentile'] = df.groupby('ID')['pay'].transform(lambda x: x.quantile(0.50)).round(3)
方法2:利用transform的关键字参数传参
transform支持将额外参数直接传递给要执行的方法,写法更简洁:
# 直接传入方法名字符串,后续参数会自动传递给quantile方法 df['50th percentile'] = df.groupby('ID')['pay'].transform('quantile', q=0.50).round(3)
完整可运行示例
import pandas as pd # 构造你的示例数据 df = pd.DataFrame({ 'ID': [1, 1, 1], 'Name': ['John', 'John', 'John'], 'pay': [10, 20, 30] }) # 执行计算新增列 df['50th percentile'] = df.groupby('ID')['pay'].transform(lambda x: x.quantile(0.50)).round(3) print(df)
运行后输出结果和你预期一致:
ID Name pay 50th percentile 0 1 John 10 20.0 1 1 John 20 20.0 2 1 John 30 20.0
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

