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

Pandas多层索引DataFrame取每个分组首行生成新表的实现问题

正确实现代码

你可以直接通过groupby结合first()方法实现需求,不需要额外排序(如果你的数据已经保证同一sid、vid分组内的行顺序符合预期的话):

# 方法1:直接按多层索引分组取每组第一个pageid,sid、vid作为列返回
result = df.groupby(level=['sid', 'vid'], as_index=False)['pageid'].first()

# 如果需要保留sid、vid作为多层索引,去掉as_index=False即可
# result = df.groupby(level=['sid', 'vid'])['pageid'].first()

运行以上代码得到的result完全符合预期结果:

sidvidpageid
1ABCdog
2DEFcat
3GHIpig

原有代码问题说明

  • 语法错误:groupby(level=['sid','vid')缺少右方括号,正确写法是groupby(level=['sid','vid'])
  • 取值逻辑错误:不能直接在groupby对象后加[0]取第一个值,需要调用first()、head(1)等分组聚合方法
  • 内存错误原因:如果你的数据集非常大,额外执行sort_values会产生数据副本占用大量内存,如果你不需要按ts排序后再取第一个,可以直接省略排序步骤。如果确实需要先按ts排序再取每组第一个,可以修改为更节省内存的写法:
# 需按ts排序的场景优化写法
result = df.sort_values(['sid','ts'], ascending=True).groupby(level=['sid','vid'], as_index=False).nth(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:06