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

如何从N个相似pandas DataFrame快速提取各单元格最大值?有无非循环方法?

多DataFrame对应位置取最大值的高效实现方法

问题背景

现有N个结构相似(列名、行数、索引完全一致)但数值不同的pandas DataFrame,需要生成一个新的DataFrame,其中每个单元格的值为所有输入DataFrame对应位置的最大值。要求实现最快的执行效率,且避免使用遍历每个DataFrame的循环写法。

示例输入代码:

import pandas as pd

A = pd.DataFrame({"pt":[0.15,0.25,0.5,0.75,1], "A1": [2,8,45,15,64], "A2":[10,4,55,17,10], "A3": [-1,9,4,24,77] })
B = pd.DataFrame({"pt":[0.15,0.25,0.5,0.75,1], "A1": [7,11,35,12,47], "A2":[-55,45,78,3,0], "A3": [55,88,23,1,3] })
C = pd.DataFrame({"pt":[0.15,0.25,0.5,0.75,1], "A1": [5,45,15,17,37], "A2":[107,5,54,30,89], "A3": [-102,51,11,10,30] })

高效实现方法

方法1:pd.concat + groupby 原生简洁写法

这是pandas原生的无循环方案,通过堆叠DataFrame后按原始索引分组取最大值:

# 将所有目标DataFrame存入列表
df_list = [A, B, C]
# 堆叠后按原行索引分组,每组取列最大值
result = pd.concat(df_list).groupby(level=0).max()

说明:pd.concat会把多个DataFrame按行堆叠,level=0指定按原始行索引分组,每组对应原DataFrame的同一行位置,最终输出结构与原DataFrame完全一致。

方法2:numpy向量化运算(极致性能)

如果追求最快执行速度,可借助numpy的向量化能力直接对数组取最大值,再转回DataFrame:

import numpy as np

# 将所有DataFrame转为numpy数组,组成三维数组
arrays = [df.to_numpy() for df in df_list]
# 沿第0轴(对应不同DataFrame的维度)取对应位置最大值
max_array = np.max(arrays, axis=0)
# 转回DataFrame,保留原列名与索引
result = pd.DataFrame(max_array, columns=A.columns, index=A.index)

说明:numpy的底层运算比pandas分组操作更快,在DataFrame数量多、数据量大的场景下性能优势显著。需确保所有输入DataFrame结构完全一致,否则会出现数组维度不匹配的错误。

注意事项

  • 必须保证所有输入DataFrame的列名、行数、索引完全对齐,否则会出现结果错位或报错。
  • 若pt这类标识列的数值在所有DataFrame中完全相同,两种方法都会自动保留其原始值(最大值即为自身),无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:18:27