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

如何按分组基于字典重命名Pandas DataFrame的mag列值

按分组将mag列映射为mag-levelN格式的解决方案

问题场景

现有如下Pandas DataFrame:

import pandas as pd

tempdf = pd.DataFrame({
    'class': ['a', 'a', 'a','a','a','a', 'b','b','b','b', 'b', 'b'],
    'type': ['train', 'train', 'train','train', 'test','test', 'train','train','train','train','test','test'],
    'mag': [15,15,8,8,15,8, 2,2,6,6,6,6]
})

需要将mag列的数值按class+type分组后的相对级别重命名为mag-levelN格式(比如同一分组内数值大的对应level1,次大的对应level2)。直接使用全局replace会出现不同分组中相同mag值对应不同level的冲突,需通过分组处理解决。

解决方案

1. 定义映射生成函数

假设按数值降序分配级别(数值越大级别越高),先定义生成每组映射字典的函数:

def make_magnif_groups(mag_series):
    # 获取分组内唯一mag值并按降序排序
    sorted_mags = sorted(mag_series.unique(), reverse=True)
    # 生成映射规则:mag值 -> mag-levelN
    return {mag: f'mag-level{i+1}' for i, mag in enumerate(sorted_mags)}

2. 分组替换mag值

使用groupby.apply对每个class+type分组单独处理,避免全局替换的冲突:

# 按class和type分组,对每组的mag列应用映射规则
tempdf['mag'] = tempdf.groupby(['class', 'type'])['mag'].apply(
    lambda x: x.map(make_magnif_groups(x))
)

# 查看结果
print(tempdf)

运行后输出结果:

class   type         mag
0      a  train  mag-level1
1      a  train  mag-level1
2      a  train  mag-level2
3      a  train  mag-level2
4      a   test  mag-level1
5      a   test  mag-level2
6      b  train  mag-level2
7      b  train  mag-level2
8      b  train  mag-level1
9      b  train  mag-level1
10     b   test  mag-level1
11     b   test  mag-level1

备选方法:生成映射表再合并

如果需要更直观的映射关系管理,可以先生成分组映射表,再和原DataFrame合并:

# 生成分组的唯一mag值集合
mapping_df = tempdf.groupby(['class', 'type'])['mag'].unique().reset_index()
# 为每组生成映射字典
mapping_df['mag_mapping'] = mapping_df['mag'].apply(make_magnif_groups)
# 展开映射表为每行对应一个mag值和其映射结果
mapping_df = mapping_df.explode('mag')
mapping_df['mag_level'] = mapping_df.apply(lambda x: x['mag_mapping'][x['mag']], axis=1)
# 合并原表与映射表,替换mag列
tempdf = tempdf.merge(mapping_df[['class', 'type', 'mag', 'mag_level']], 
                      on=['class', 'type', 'mag'], how='left')
tempdf = tempdf.drop('mag', axis=1).rename(columns={'mag_level': 'mag'})

print(tempdf)

该方法同样能得到一致的结果,适合需要查看或调整分组映射规则的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:05:11