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

如何对比同结构DataFrame并生成取最大值的新DataFrame

解决同结构DataFrame逐元素取最大值并标注来源的问题

方法思路

要实现两个列名、索引完全一致的DataFrame逐位置取最大值,并标注值的来源,可分为三步:

  • 计算每个位置的最大值
  • 根据最大值的来源生成对应标注文本
  • 将最大值与标注文本拼接得到最终结果

完整代码示例

import pandas as pd
import numpy as np

# 构建示例中的DataFrame
df1 = pd.DataFrame(
    {'col_1': [4, 3], 'col2': [7, 4], 'col-3': [4, 1]},
    index=['rft_12312', 'rft_321321']
)

df2 = pd.DataFrame(
    {'col_1': [7, 3], 'col2': [3, 7], 'col-3': [4, 6]},
    index=['rft_12312', 'rft_321321']
)

# 1. 计算逐元素的最大值
max_values = pd.DataFrame(np.maximum(df1, df2), index=df1.index, columns=df1.columns)

# 2. 生成来源标注文本
source_annotations = np.where(
    df2 > df1,
    "(因df2该位置值大于df1)",
    np.where(df1 > df2, "(因df1该位置值大于df2)", "(值相等时来源不限)")
)

# 3. 合并最大值与标注,得到最终结果
result_df = max_values.astype(str) + source_annotations

输出结果

执行上述代码后,result_df的内容与需求完全匹配:

col_1                col2       col-3
rft_12312   7(因df2该位置值大于df1)  7(因df1该位置值大于df2)  4(值相等时来源不限)
rft_321321  3(值相等时来源不限)        7(因df2该位置值大于df1)  6(因df2该位置值大于df1)

为什么pd.update和pd.compare不适用

  • pd.update仅支持用另一个DataFrame的值覆盖当前DataFrame,无法实现"取最大值"的逻辑
  • pd.compare的作用是对比两个DataFrame的差异并输出差异位置,不能直接生成包含最大值的结果集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:01:41