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

如何将DataFrame中Max列的列名替换为同行对应列的值?

解决方法

针对大数据量的场景,优先使用向量化操作而非逐行apply,避免性能瓶颈。以下是两种高效方案:

方案1:使用DataFrame.lookup(简洁直接)

lookup是Pandas原生的向量化方法,可直接根据行索引和列名匹配对应值,适合行列对应取值的场景:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'Max': ['Column C', 'Column A'],
    'Column A': [200, 600],
    'Column B': [500, 700],
    'Column C': [800, 1000]
})

# 替换Max列的值
df['Max'] = df.lookup(df.index, df['Max'])

运行后即可得到期望输出,该方法代码简洁且性能高效。

方案2:使用Numpy索引(性能最优)

对于超大规模数据集,直接操作Numpy底层数组能进一步提升效率,绕开Pandas的部分封装开销:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'Max': ['Column C', 'Column A'],
    'Column A': [200, 600],
    'Column B': [500, 700],
    'Column C': [800, 1000]
})

# 获取列名对应的位置索引
col_indices = df.columns.get_indexer(df['Max'])
# 通过Numpy索引提取对应值并替换
df['Max'] = df.values[np.arange(len(df)), col_indices]

注意事项

  • 确保Max列中的所有值都是DataFrame中存在的列名,否则会引发索引错误。若存在无效列名,可先通过df['Max'].isin(df.columns)过滤或处理异常值。
  • 两种方法均为向量化操作,时间复杂度为O(n),远优于df.apply(lambda x: x[x['Max']], axis=1)这类逐行处理(*O(n²)*复杂度)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:12:37