Pandas按AdmittingCode分组计算LOS均值生成分类列的实现方法
Pandas分组生成LOS分类列实现方案
核心思路
- 用
groupby()按AdmittingCode字段分组后取LOS列,调用transform('mean')计算每组均值,该方法会返回和原DataFrame长度一致的均值序列,可直接和每行数据对齐 - 通过布尔判断直接转整数的方式赋值,小于分组均值返回0,大于等于返回1,仅需一行代码即可生成目标列
完整实现代码
import pandas as pd # 构造示例输入DataFrame,实际使用时替换成你自己的数据源即可 df = pd.DataFrame({ 'MemberID': [1, 2, 1, 2], 'AdmittingCode': ['a', 'a', 'b', 'b'], 'LOS': [5, 10, 2, 1] }) # 核心处理逻辑 df['LOSCategory'] = (df['LOS'] >= df.groupby('AdmittingCode')['LOS'].transform('mean')).astype(int)
结果验证
运行上述代码后输出df即可得到预期结果:
| MemberID | AdmittingCode | LOS | LOSCategory |
|---|---|---|---|
| 1 | a | 5 | 0 |
| 2 | a | 10 | 1 |
| 1 | b | 2 | 1 |
| 2 | b | 1 | 0 |
逻辑说明
groupby('AdmittingCode')['LOS'].transform('mean')会先分别计算各组均值:a组均值为(5+10)/2=7.5,b组均值为(2+1)/2=1.5,返回的序列为[7.5, 7.5, 1.5, 1.5],和原DataFrame每行一一对应。布尔判断后转整数会自动把True转为1、False转为0,完全符合赋值要求。
内容的提问来源于stack exchange,提问作者WollyMc
相关产品推荐
相关产品推荐

