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

如何在DataFrame中创建策略列:取指定列最大值并返回对应标识?

解决DataFrame创建策略列的问题

嘿,我来帮你搞定这个需求!要生成你需要的策略列,用Pandas可以轻松实现,下面给你两种实用方法,还有处理并列最大值的拓展方案:

方法一:高效的矢量化操作(推荐)

这种方法利用Pandas的矢量化函数,比逐行处理效率更高,适合大数据集:

首先,我们先构造示例DataFrame方便演示:

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'A10d': [3, 1, 2, 4],
    'B10d': [2, 4, 1, 4],
    'C10d': [1, 3, 5, 3]
})

然后按以下步骤生成策略列:

  1. 获取每行最大值对应的列名
  2. 提取列名中的标识(A/B/C)
  3. 获取每行的最大值
  4. 拼接成目标格式的字符串

代码实现:

# 指定目标列
target_cols = ['A10d', 'B10d', 'C10d']

# 获取每行最大值对应的列名
max_col_names = df[target_cols].idxmax(axis=1)
# 提取标识(取列名第一个字符)
labels = max_col_names.str[0]
# 获取每行最大值
max_values = df[target_cols].max(axis=1)

# 生成策略列
df['策略'] = labels + ',值为' + max_values.astype(str)

运行后,示例DataFrame的策略列会是:['A,值为3', 'B,值为4', 'C,值为5', 'A,值为4']

方法二:逐行自定义处理(更直观)

如果觉得矢量化操作有点抽象,也可以用apply逐行处理,逻辑更易懂:

def generate_strategy(row):
    target_cols = ['A10d', 'B10d', 'C10d']
    # 获取当前行的最大值
    current_max = row[target_cols].max()
    # 找到对应标识
    for col in target_cols:
        if row[col] == current_max:
            # 取列名第一个字符作为标识
            label = col[0]
            return f'{label},值为{current_max}'

# 应用函数生成策略列
df['策略'] = df.apply(generate_strategy, axis=1)

拓展:处理并列最大值的情况

如果存在多个列数值相同且都是最大值的场景(比如示例中第四行A10d和B10d都是4),上面的方法会返回第一个出现的标识。如果需要显示所有并列的标识,可以修改逻辑:

target_cols = ['A10d', 'B10d', 'C10d']
max_values = df[target_cols].max(axis=1)

# 找出每行所有等于最大值的列,提取标识
df['策略'] = df.apply(lambda row: 
    '、'.join([col[0] for col in target_cols if row[col] == max_values[row.name]]) 
    + ',值为' + str(max_values[row.name]), 
    axis=1
)

这样第四行的策略列就会变成'A、B,值为4',完美处理并列场景~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:10:38