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

使用Pandas Groupby分组后获取最大值对应project_id的问题

解决Pandas分组后获取最大值对应ID的问题

我来帮你搞定这个分组聚合的需求!你需要按time_stamp分组后,拿到三个关键信息:value_1的最大值、value_2的平均值,以及对应value_1最大值的project_id,下面是具体的实现步骤和代码示例:

核心思路

先通过分组聚合得到每组的最大值和平均值,再将原始数据与聚合结果关联,筛选出符合最大值条件的行,从而匹配到对应的project_id。

代码实现

假设你的原始数据DataFrame名为df,结构类似这样:

time_stampproject_idvalue_1value_2
2023-01-01A105
2023-01-01B157
2023-01-02C203
2023-01-02D184

步骤1:分组计算基础聚合值

先算出每组的value_1最大值和value_2平均值:

import pandas as pd

# 分组聚合,得到max和mean结果
aggregated = df.groupby('time_stamp').agg(
    max_value_1=('value_1', 'max'),
    avg_value_2=('value_2', 'mean')
).reset_index()

步骤2:匹配最大值对应的project_id

将原始数据和聚合结果合并,筛选出value_1等于分组最大值的行,提取需要的列:

# 合并数据并筛选符合条件的行
result = df.merge(aggregated, on='time_stamp') \
           .query('value_1 == max_value_1') \
           [['time_stamp', 'max_value_1', 'avg_value_2', 'project_id']]

处理多ID对应同一最大值的情况

如果同一time_stamp下有多个project_id对应相同的value_1最大值,可以把这些ID合并(比如用逗号分隔):

result = df.merge(aggregated, on='time_stamp') \
           .query('value_1 == max_value_1') \
           .groupby('time_stamp') \
           .agg(
               max_value_1=('max_value_1', 'first'),
               avg_value_2=('avg_value_2', 'first'),
               project_id=('project_id', ', '.join)
           ).reset_index()

最终输出效果

运行后你会得到符合预期的结果:

time_stampmax_value_1avg_value_2project_id
2023-01-01156.0B
2023-01-02203.5C

如果你的time_stamp是带时分秒的datetime类型,需要按日期分组的话,记得先处理日期格式:

df['time_stamp'] = pd.to_datetime(df['time_stamp']).dt.date

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:36:26