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

如何从pandas多重索引表中提取每个user_id对应count最大的行

问题解决方法

问题原因说明

你使用df.groupby(level=0).apply(max)时丢失date列,核心原因是max()是列级聚合函数,会对每个分组的每一列单独计算最大值,而非提取count值最大的整行数据:如果date列的类型不支持最大值计算,会被直接丢弃;就算支持计算,得到的date值也大概率和count最大值不属于同一行,不符合需求。

操作步骤

  • 第一步:补全空的user_id归属
    你当前存在user_id索引为空、归属上一条非空user_id的情况,需要先对空的user_id做前向填充,确保每行都属于正确分组:
import pandas as pd
# 把索引转成列处理更灵活
df = df.reset_index()
# 前向填充空的user_id
df['user_id'] = df['user_id'].replace(['', None], pd.NA).ffill()
  • 第二步:提取每个user_id下count最大的整行数据
# 定位每个分组count最大值对应的行索引,提取对应行的全部三个字段
result = df.loc[df.groupby('user_id')['count'].idxmax(), ['user_id', 'date', 'count']].reset_index(drop=True)

如果需要保留原多重索引结构,可以直接操作索引:

# 填充空的user_id索引
user_level = df.index.get_level_values(0).to_series().replace(['', None], pd.NA).ffill()
df.index = df.index.set_levels([user_level, df.index.get_level_values(1)], level=[0, 1])
# 取count最大值行
result = df.loc[df.groupby(level=0)['count'].idxmax()]
  • 特殊场景处理:如果同一个user_id下存在多条count同为最大值的行,需要全部保留的话,用如下代码:
result = df[df['count'] == df.groupby('user_id')['count'].transform('max')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:57:05