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

如何按分组提取DataFrame中各组的首个非零值?

按分组提取每组首个非零values值及对应Days值

给定如下pandas DataFrame:

Group  values Days
A      0      12 
A      0      15
A      30     18
A      60     20
B      0      2
B      15     10
B      16     20
B      20     30
C      0      5
C      30     10
C      70     15

需求是按Group分组,检索出每组的首个非零values值及其对应的Days值,期望输出如下:

Group Values  Days
A     30      18
B     15      10
C     30      10

解决方案

方法1:过滤非零后分组取首行

先筛选出values不为0的行,再按Group分组并取每组第一行,操作简洁高效:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Group': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C'],
    'values': [0, 0, 30, 60, 0, 15, 16, 20, 0, 30, 70],
    'Days': [12, 15, 18, 20, 2, 10, 20, 30, 5, 10, 15]
})

# 过滤非零值 + 分组取首行
result = df[df['values'] != 0].groupby('Group').first().reset_index()
# 重命名列以匹配期望输出
result = result.rename(columns={'values': 'Values'})

print(result)

方法2:groupby结合apply处理每组

如果需要针对每组单独筛选非零值并取首项,可使用apply,适合更复杂的组内逻辑:

result = df.groupby('Group').apply(
    lambda x: x[x['values'] != 0].iloc[0]
).reset_index(drop=True).rename(columns={'values': 'Values'})

print(result)

两种方法均能输出符合要求的结果。

内容的提问来源于stack exchange,提问作者BD'auria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:35:12