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

基于阈值从Pandas DataFrame提取各行业Top N行的技术需求

解决方案:基于阈值从Pandas DataFrame提取各行业Top N行

我来帮你搞定这个需求——按行业分组,提取ROE和ROCE综合排名前N的行,其中N由对应行业的Threshold值指定(观察输入数据,同一行业的Threshold值是统一的)。

完整代码实现

import pandas as pd

# 输入原始DataFrame
df = pd.DataFrame({
    'Company':['A','B','C','D','E','F'],
    'Industry':['Metals','Metals','IT','IT','IT','banking'],
    'ROE':[10,9,5,14,1,9],
    'ROCE':[10,5,5,1,10,9],
    'Threshold':[1,1,2,2,2,1]
})

# 定义分组处理的自定义函数
def get_top_n(group):
    # 获取当前行业的阈值N(同行业阈值统一,取第一个值即可)
    n = group['Threshold'].iloc[0]
    # 计算ROE+ROCE的综合得分,按得分降序排序后取前N行
    return group.assign(total_score=group['ROE'] + group['ROCE'])\
                .sort_values('total_score', ascending=False)\
                .head(n)

# 应用分组逻辑并整理最终结果
dfout = df.groupby('Industry', group_keys=False)\
          .apply(get_top_n)\
          .drop('total_score', axis=1)\
          .reset_index(drop=True)

print(dfout)

运行结果

Company Industry  ROE  ROCE  Threshold
0       A    Metals   10    10          1
1       D        IT   14     1          2
2       E        IT    1    10          2
3       F   banking    9     9          1

代码逻辑拆解

  1. 自定义分组函数get_top_n:

    • 先获取当前行业的阈值n:因为同一行业的Threshold值完全一致,直接取分组内第一个值就可以。
    • 临时计算综合得分:添加total_score列,把ROE和ROCE的数值相加作为排名依据(如果你的需求是按单个指标排名,比如只看ROE,直接把排序依据改成ROE就行)。
    • 排序取Top N:按综合得分降序排列后,提取前n行。
  2. 分组应用与结果整理:

    • 用groupby('Industry')按行业拆分数据,group_keys=False避免分组键被自动添加到结果索引里。
    • 通过apply把自定义函数套用到每个行业分组上。
    • 最后删掉临时的total_score列,重置索引得到干净的输出DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:38:42