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

如何在Pandas中选取分组后DataFrame的每组首行

嘿,我来帮你搞定这个需求!要对DataFrame按列分组后选取每组的首行,Pandas提供了好几种实用的方法,下面结合你的数据详细演示:

首先先确认你的DataFrame构造(修正了原输出里的小错误,确保数据准确):

import pandas as pd
df = pd.DataFrame([
    [1, 1, 2, 2, 2, 3,4,5,5,5,6,6,6,6],
    list('AABBBCDEEEFFFF'),
    [1,2,3,4,5,6,7,8,9,10,11,12,13,14],
    [1,2,3,4,5,6,7,8,9,11,12,11,11,11]
]).T
df.columns = ['col1','col2','col3','col4']

方法1:用groupby().first()提取每组首条有效数据

这个方法会返回每组中各列的第一个非空值,适合你需要提取组内首条有效记录的场景:

# 按col1分组,取每组首行
result_first = df.groupby('col1').first()
print(result_first)

如果需要按多列(比如col1+col2)分组,只要把分组列放进列表即可:

result_multi_first = df.groupby(['col1', 'col2']).first()
print(result_multi_first)

方法2:用groupby().head(1)保留原行结构

这个方法会直接返回每组的第一行原始数据,并且保留原DataFrame的行索引,适合需要保留原行上下文的场景:

result_head = df.groupby('col1').head(1)
print(result_head)

方法3:用groupby().nth(0)灵活选取指定行

nth(0)和head(1)类似,但它能更灵活地选择组内的第N行(这里0代表首行),还能处理重复索引的情况:

# 默认返回分组键作为索引
result_nth = df.groupby('col1').nth(0)
print(result_nth)

# 如果想保留原行索引,设置keep_index=True
result_nth_keep_idx = df.groupby('col1').nth(0, keep_index=True)
print(result_nth_keep_idx)

三种方法的小区别

  • first():自动忽略NaN值,取每组该列的第一个非空值;结果索引为分组键。
  • head(1):返回原DataFrame的完整行,保留原索引,哪怕该行包含NaN也会返回。
  • nth(0):严格选取组内的第0行(遵循原数据顺序),包含NaN也会保留;可通过参数控制是否保留原索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:12:03