Pandas:将组内probability<15%的number替换为组内概率最高的number
数据处理需求与实现
原始数据
| category | number | probability |
|---|---|---|
| 1102 | 24 | 0.3 |
| 1102 | 18 | 0.6 |
| 1102 | 16 | 0.1 |
| 2884 | 24 | 0.16 |
| 2884 | 15 | 0.8 |
| 2884 | 10 | 0.04 |
需求说明
按category分组,将每组中probability低于15%(即0.15)的number值,替换为该组内probability最高的对应number值。
实现代码(Python Pandas)
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'category': [1102, 1102, 1102, 2884, 2884, 2884], 'number': [24, 18, 16, 24, 15, 10], 'probability': [0.3, 0.6, 0.1, 0.16, 0.8, 0.04] }) # 按category分组,提取每组概率最高对应的number group_top_num = df.groupby('category').apply( lambda group: group.loc[group['probability'].idxmax(), 'number'] ).reset_index(name='top_number') # 合并原始数据与每组的top_number df = df.merge(group_top_num, on='category') # 替换符合条件的number值 df['number'] = df.apply( lambda row: row['top_number'] if row['probability'] < 0.15 else row['number'], axis=1 ) # 移除临时辅助列 df = df.drop('top_number', axis=1) print(df)
处理后结果
| category | number | probability |
|---|---|---|
| 1102 | 24 | 0.3 |
| 1102 | 18 | 0.6 |
| 1102 | 18 | 0.1 |
| 2884 | 24 | 0.16 |
| 2884 | 15 | 0.8 |
| 2884 | 15 | 0.04 |
内容的提问来源于stack exchange,提问作者Zichaun
相关产品推荐
相关产品推荐

