如何在DataFrame中实现带随机平局决胜的idxmax功能?
实现带随机平局决胜的idxmax功能
解决方案步骤
- 仅针对目标列(col1、col2)处理,排除id列干扰
- 对每行筛选出所有等于最大值的列作为候选
- 从候选列中随机选择一个作为结果
代码实现
首先导入依赖库:
import pandas as pd import numpy as np
构造示例DataFrame:
df = pd.DataFrame({ 'id': [1, 2, 3], 'col1': [3.0, 5.0, 6.0], 'col2': [4.0, 5.0, 9.0] })
定义随机决胜的idxmax函数:
def random_idxmax(row): max_val = row.max() # 筛选出值等于最大值的列名列表 candidate_cols = row[row == max_val].index.tolist() # 随机返回一个候选列 return np.random.choice(candidate_cols)
将函数应用到目标列,生成结果列:
df['idxmax'] = df[['col1', 'col2']].apply(random_idxmax, axis=1)
效果验证
运行上述代码后,非平局行(第1、3行)会稳定返回最大值对应的列(col2);平局行(第2行)每次运行会随机返回col1或col2,彻底消除原idxmax(axis=1)的首列偏差。
比如多次执行查看第2行结果:
for _ in range(3): print(f"第2行idxmax结果: {df.loc[1, 'idxmax']}")
输出示例:
第2行idxmax结果: col1 第2行idxmax结果: col2 第2行idxmax结果: col1
内容的提问来源于stack exchange,提问作者Kalanchoe345
相关产品推荐
相关产品推荐

