如何基于importance列占比给Pandas DataFrame添加ranking排名列
Pandas添加按权重占比排序的排名列
原始数据
先定义初始的DataFrame:
import pandas as pd df = pd.DataFrame({'feature':['a','b','c','d','e'], 'importance':[0.1, 0.5, 0.4, 0.2, 0.8]})
原始数据展示:
| feature | importance |
|---|---|
| a | 0.1 |
| b | 0.5 |
| c | 0.4 |
| d | 0.2 |
| e | 0.8 |
需求说明
需要为DataFrame添加名为ranking的列,规则如下:
- 第一步:计算每个feature的
importance占比,公式为:占比 = 单个feature的importance值 / 所有feature的importance总和 - 第二步:根据占比从高到低分配排名(占比最高的排第1,依次递推)
解决方案
可以直接通过一行代码完成计算和排名,无需额外中间列:
# 计算占比并按降序生成排名 df['ranking'] = (df['importance'] / df['importance'].sum()).rank(ascending=False, method='min').astype(int)
最终结果
执行代码后,打印DataFrame:
print(df)
输出结果:
feature importance ranking 0 a 0.1 5 1 b 0.5 2 2 c 0.4 3 3 d 0.2 4 4 e 0.8 1
代码说明
df['importance'].sum():计算所有importance的总和df['importance'] / 总和:得到每个feature的权重占比.rank(ascending=False, method='min'):按占比降序排名,method='min'确保相同占比的feature获得相同的最小排名(本例无重复占比,不影响结果).astype(int):将排名转换为整数类型
内容的提问来源于stack exchange,提问作者Amina Umar
相关产品推荐
相关产品推荐

