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

如何在Pandas中按条件分组行:指定列非空时分组求和

解决Pandas中仅对非空列数据分组求和的问题

你需要的是只对food列不为空的行,按time列分组并对food求和,你的伪代码思路有两个问题:一是Pandas中判断非空要用notna()而非直接!= null,二是直接用if判断整列的布尔Series会触发报错(因为if需要单个布尔值,而不是一组布尔值)。

下面是两种简洁可行的实现方式:

方法一:先过滤再分组(推荐,更高效)

先筛选出food列非空的行,再进行分组求和:

# 分步写法
filtered_data = df[df['food'].notna()]
sum_result = filtered_data.groupby('time')['food'].sum()

# 一行简写
sum_result = df[df['food'].notna()].groupby('time')['food'].sum()

方法二:结合NumPy判断非空

如果你想用NumPy实现非空判断,也可以这样写:

import numpy as np
sum_result = df[np.notna(df['food'])].groupby('time')['food'].sum()

补充说明

  • 不要尝试在groupby之后的agg里嵌套where,这样逻辑会更复杂,先过滤再分组是最直观高效的方案。
  • 如果你的“不为空”还需要排除空字符串(比如''),可以把过滤条件改成df['food'].notna() & (df['food'] != '')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:10:29