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

遍历分组后的pandas DataFrame时如何获取每组的首行和末行

解决方案

完全可以通过pandas原生操作实现需求,不需要转为列表嵌套元组结构遍历。

问题原因说明

你之前调用first()、last()不符合预期,是因为pandas的groupby.first()、groupby.last()默认会跳过空值,返回分组内对应列第一个非空值,而非严格按照排序返回物理上的第一行/最后一行数据。

方案1:向量化聚合(推荐,性能最优)

分组后直接用nth()方法取指定位置的行,无需显式循环,适合数据量较大的场景:

# 按需替换成你需要提取的列名即可
res = df.groupby("group_number", as_index=False).agg(
    # 取首行的date列值
    start_date=("date", "nth", 0),
    # 取末行的date列值
    end_date=("date", "nth", -1),
    # 取首行的其他列示例
    start_xxx=("xxx", "nth", 0),
    # 取末行的其他列示例
    end_xxx=("xxx", "nth", -1)
)

方案2:循环内直接取行

如果你需要保留原有遍历逻辑,可以直接对分组后的DataFrame用iloc取行:

for group_number, group in df.groupby("group_number"):
    # 首行
    first_row = group.iloc[0]
    # 末行
    last_row = group.iloc[-1]
    # 提取指定列值示例:first_row["date"]、last_row["value"]
    # 后续业务逻辑

如果要继续使用first()/last()方法,可添加skipna=False参数关闭空值过滤,即可返回排序后的第一/最后一行数据:group.first(skipna=False)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:15:08