You need to enable JavaScript to run this app. Python Pandas多列对比:基于上一行最大值选取对应列方案问询
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas多列对比:基于上一行最大值选取对应列方案问询

实现思路指导

存储方案选择

优先将数据整合为单个DataFrame存储,统一使用前缀+1/2的列名格式(如A1、A2、B1、B2),相比多独立DataFrame存储无需额外处理跨表索引对齐,逻辑更简洁,性能更好。

方案1:贴合现有循环框架的实现

核心逻辑是在循环内先取上一行所有后缀为1的列的最大值对应列,再映射到当前行的后缀为2的列取值:

import pandas as pd

# 提前生成列映射关系
cols_1 = [col for col in df.columns if col.endswith('1')]
col_1_to_2 = {c: c[:-1] + '2' for c in cols_1}
df_results = []

for i in range(1, len(df.index)):
    # 取上一行所有后缀为1的列的值
    prev_row_vals = df.loc[i-1, cols_1]
    # 找到最大值对应的列名
    max_col_1 = prev_row_vals.idxmax()
    # 取当前行对应后缀为2的列的值
    current_result = df.loc[i, col_1_to_2[max_col_1]]
    df_results.append(current_result)

# 写入原表新列D,第一行无上游数据填充空值,可按需求修改默认值
df['D'] = [pd.NA] + df_results

方案2:Pandas向量化高效实现(适合数据量较大场景)

无需逐行循环,利用shift方法对齐上一行数据,性能比循环实现高1~2个数量级:

import pandas as pd

cols_1 = [col for col in df.columns if col.endswith('1')]
col_1_to_2 = {c: c[:-1] + '2' for c in cols_1}

# 将所有后缀为1的列上移一行,对齐到当前行
prev_1_cols = df[cols_1].shift(1)
# 逐行计算最大值对应的列
max_col_1 = prev_1_cols.idxmax(axis=1)
# 映射到对应后缀为2的列取值
df['D'] = df.rename(columns=col_1_to_2).lookup(max_col_1.index, max_col_1.map(col_1_to_2))

多独立DataFrame兼容处理

如果你坚持使用多个独立DataFrame存储,先做一步数据合并即可复用上述逻辑:

  • 对每个独立df的列名增加前缀标识,如df_a的column_1/column_2重命名为A1/A2
  • 按索引拼接所有df为单个大表,后续逻辑和上述实现完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:54:09