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

如何用Pandas Groupby获取每组中首个非零值的记录

问题

我创建了如下Pandas DataFrame:

import pandas as pd

ds = {'cycle' : [1,1,1,1,2,2,2,2], 'values' : [0,0,-1,1,2,0,0,1]}

df = pd.DataFrame(data=ds)

该DataFrame内容如下:

cycle  values
0      1       0
1      1       0
2      1      -1
3      1       1
4      2       2
5      2       0
6      2       0
7      2       1

需要创建一个名为ds的新DataFrame,仅保留每个cycle分组中values列的首个非零值记录,期望结果如下:

cycle  values
0      1      -1
1      2       2

解决方案

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

先筛选出values不为0的行,再按cycle分组后取每组的第一行,最后重置索引:

# 筛选所有values非零的行
non_zero_rows = df[df['values'] != 0]
# 按cycle分组,取每组第一行并重置索引
ds = non_zero_rows.groupby('cycle').first().reset_index()

方法二:分组内直接筛选首个非零行

通过groupby结合apply,在每个分组内找到第一个非零值对应的行:

ds = df.groupby('cycle').apply(
    lambda group: group[group['values'] != 0].iloc[0]
).reset_index(drop=True)

两种方法都能得到目标结果,方法一先过滤零值行,减少了分组处理的数据量,数据量大时效率更优;方法二逻辑更直接,适合快速实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:16:03