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

基于另一列最大值合并两个DataFrame及报错解决

解决DataFrame合并并保留每组最大值对应行的问题

报错原因分析

你原来的代码df3 = df1.merge(df2, on='C2', how='inner')['val'].max()执行后,得到的并不是一个DataFrame,而是整个val列的单个最大值(numpy.float64类型)。当你尝试调用head()方法时,单个数值对象自然没有这个属性,所以触发了AttributeError。你的需求是保留每个C2分组下val最大的完整行,而不是求全局最大值,所以原代码的逻辑不符合需求。

正确解决方案

我们需要先从df2中筛选出每个C2对应的val最大的行,再和df1合并,这里提供两种常用方法:

方法1:使用groupby + idxmax

先通过分组找到每个C2组内val最大值对应的行索引,再提取这些行,最后合并:

# 获取每个C2组中val最大的行的索引
max_row_indices = df2.groupby('C2')['val'].idxmax()
# 从df2中提取这些行
df2_max_rows = df2.loc[max_row_indices]
# 与df1合并得到目标结果
df3 = df1.merge(df2_max_rows, on='C2', how='inner')

方法2:使用sort_values + drop_duplicates

先按C2升序、val降序排序,然后保留每个C2的第一行(即val最大的行),再合并:

# 按C2分组,val降序排序,去重保留每组第一行
df2_max_rows = df2.sort_values(['C2', 'val'], ascending=[True, False]).drop_duplicates('C2')
# 合并得到目标DataFrame
df3 = df1.merge(df2_max_rows, on='C2', how='inner')

两种方法都能得到你期望的输出:

C2C1val
AX100
BE90
CG100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:27:00