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

基于Pandas按AdmittingCode分组并多条件判断创建LOSCategory分类列

Pandas: 基于分组统计量与多条件生成分类列

我来帮你搞定这个Pandas的分组条件判断问题!根据你的需求,我们需要基于两个同时成立的分组级条件来生成LOSCategory列,下面一步步来实现:

1. 先创建示例数据

首先我们还原你给出的示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'MemberID': [1, 2, 1, 2],
    'AdmittingCode': ['a', 'a', 'b', 'b'],
    'LOS': [5, 10, 2, 1],
    'Episode': [3, 6, 3, 6]
})

2. 实现多条件分组判断逻辑

核心思路是先计算每个AdmittingCode分组的LOS均值和中位数,再结合Episode的条件进行判断:

# 按AdmittingCode分组,计算每组LOS的均值和中位数,并映射到原DataFrame的每一行
grouped_los = df.groupby('AdmittingCode')['LOS']
los_mean = grouped_los.transform('mean')
los_median = grouped_los.transform('median')

# 定义两个需要同时满足的条件
condition1 = los_mean != 2 * los_median  # 分组均值≠中位数的2倍
condition2 = df['Episode'] < 5           # 当前行Episode小于5

# 生成LOSCategory:两个条件同时满足则为0,否则为1
df['LOSCategory'] = (~(condition1 & condition2)).astype(int)

3. 逻辑解释

  • transform方法的作用是把分组计算的统计量(均值、中位数)广播到原DataFrame的每一行,保证我们能逐行和分组级的数值做比较。
  • 我们用&表示两个条件同时成立,再通过~取反,最后转成整数类型(True对应1,False对应0),正好符合你要求的分类规则。

如果你觉得取反的逻辑有点绕,也可以用np.where写得更直观:

import numpy as np

df['LOSCategory'] = np.where(condition1 & condition2, 0, 1)

这个写法直接指定:当两个条件同时满足时赋值0,否则赋值1,结果和上面完全一致。

最终结果

运行代码后,你会得到预期的DataFrame:

MemberIDAdmittingCodeLOSEpisodeLOSCategory
1a530
2a1061
1b230
2b161

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:22:36