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

基于ID分组Pandas DataFrame,将含'H'的组risk列全改为'H'

解决Pandas按组批量修改列值的需求

嘿,这个需求我之前也碰到过,用Pandas可以很轻松搞定!核心思路就是先按ID分组判断是否存在'H',再把符合条件的组统一修改值。下面给你两个实用的实现方法:

方法一:用groupby + transform(最简洁直接)

这个方法一步到位,transform会自动把分组的计算结果映射回原DataFrame的每一行,不用额外处理索引:

import pandas as pd

# 构造你的原始DataFrame
data = {
    'ID': [1111,1111,1111,1111,1112,1112,1113,1113,1113,1113,1113,1114,1114,1114,1114],
    'risk': ['H','H','L','L','L','L','H','L','H','H','H','L','L','L','L']
}
df = pd.DataFrame(data)

# 核心逻辑:按ID分组,组内有'H'则整组risk设为'H',否则保留原值
df['risk'] = df.groupby('ID')['risk'].transform(lambda x: 'H' if (x == 'H').any() else x)

print(df)

方法二:用groupby + filter + loc(更灵活,适合后续复用ID列表)

如果之后你还需要用到那些包含'H'的ID列表,这个方法会更方便:

import pandas as pd

data = {
    'ID': [1111,1111,1111,1111,1112,1112,1113,1113,1113,1113,1113,1114,1114,1114,1114],
    'risk': ['H','H','L','L','L','L','H','L','H','H','H','L','L','L','L']
}
df = pd.DataFrame(data)

# 第一步:筛选出所有包含'H'的ID
has_h_ids = df.groupby('ID').filter(lambda x: (x['risk'] == 'H').any())['ID'].unique()

# 第二步:把这些ID对应的所有行的risk改成'H'
df.loc[df['ID'].isin(has_h_ids), 'risk'] = 'H'

print(df)

最终期望输出

两种方法都会得到你想要的结果:

ID risk

0 1111 H
1 1111 H
2 1111 H
3 1111 H
4 1112 L
5 1112 L
6 1113 H
7 1113 H
8 1113 H
9 1113 H
10 1113 H
11 1114 L
12 1114 L
13 1114 L
14 1114 L

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:10:09