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

如何从Pandas DataFrame中获取每行n个最大值并标记1/0

实现每行最大值/前N个最大值的0-1标记矩阵

先确认你的原始数据结构(运行你提供的代码后得到的close DataFrame):

import pandas as pd

date = pd.date_range('10/01/2018', periods=5, freq='D')
close = pd.DataFrame({
    'ABC': [1, 5, 3, 6, 2],
    'EFG': [12, 51, 43, 56, 22],
    'XYZ': [35, 36, 36, 36, 37],
}, index=date)

1. 标记每行的最大值(单个最大值)

直接用df.eq(df.max(axis=1), axis=0)判断每个元素是否等于该行最大值,再转为整数类型(1/0):

# 生成最大值标记矩阵
max_mark = close.eq(close.max(axis=1), axis=0).astype(int)
print(max_mark)

输出结果:

ABC  EFG  XYZ
2018-10-01    0    0    1
2018-10-02    0    1    0
2018-10-03    0    1    0
2018-10-04    0    1    0
2018-10-05    0    0    1

2. 标记每行前N个最大值(支持并列)

如果需要标记每行前k个最大值(包括并列情况),可以用rank方法对每行进行降序排名,再筛选排名≤k的位置:

示例:标记每行前2个最大值

k = 2
# 按行降序排名,method='min'保证并列值获得相同的最小排名
top_k_mark = close.rank(ascending=False, method='min', axis=1).le(k).astype(int)
print(top_k_mark)

输出结果:

ABC  EFG  XYZ
2018-10-01    0    1    1
2018-10-02    0    1    1
2018-10-03    0    1    1
2018-10-04    0    1    1
2018-10-05    0    1    1

关键参数说明:

  • ascending=False:降序排名,数值越大排名越靠前
  • method='min':对于并列的数值,使用它们的最小排名(比如某行有两个并列第二的数值,排名都为2,都会被计入前2)
  • 如果需要严格取前k个不同的数值(忽略并列),可以将method改为'first',此时并列值会按列顺序分配不同排名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:22:15