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

如何过滤col3空值后按col1分组筛选Pandas DataFrame的col2最大值行

解决Pandas筛选分组最大值行的问题

错误原因

你的代码报错是因为&两边的操作数类型不匹配:df[['col3']].notnull().all(1)是布尔数组,而df.sort_values('col2').drop_duplicates(['col1'], keep='last')是完整的DataFrame,布尔数组和DataFrame不能直接用&运算。

正确实现方法

方法1:利用transform匹配分组最大值

先过滤掉col3为空的行,再通过groupby.transform获取每组col2的最大值,最后用布尔索引筛选出对应行:

# 过滤col3非空行
filtered_df = df[df['col3'].notna()]
# 获取每组col2的最大值,生成与原表长度一致的数组
group_max = filtered_df.groupby('col1')['col2'].transform('max')
# 筛选出col2等于组内最大值的行
result = filtered_df[filtered_df['col2'] == group_max]

方法2:排序后分组取首尾行

同样先过滤col3非空行,然后按col2排序,再按col1分组取每组最后一行(升序排序时最后一行是最大值):

filtered_df = df[df['col3'].notna()]
# 按col2升序排序,分组取每组最后一行
result = filtered_df.sort_values('col2').groupby('col1').tail(1)
# 或者按col2降序排序,分组取每组第一行,结果相同
result = filtered_df.sort_values('col2', ascending=False).groupby('col1').head(1)

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

col1   col2   col3
x      12     abc
y      10     abc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:55:20