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

如何在agg聚合中使用idxmax获取其他列的对应值

Pandas分组聚合获取极值对应日期的解决方案

方法1:在agg中直接结合idxmax/idxmin提取日期

你可以通过自定义lambda函数,在agg操作里针对每个分组,用idxmax找到High最大值对应的原DataFrame索引,再提取对应的Date字段。同理处理Low最小值的日期,代码示例如下:

import pandas as pd

weekly = df.groupby(['Year', 'Qtr_Year'], as_index=False).agg(
    High=('High', 'max'),
    Date_High=('High', lambda x: df.loc[x.idxmax(), 'Date']),
    Low=('Low', 'min'),
    Date_Low=('Low', lambda x: df.loc[x.idxmin(), 'Date'])
)

方法2:用groupby.apply实现更直观的逻辑

如果觉得lambda写法不够清晰,可通过自定义函数处理每个分组,逻辑更直白:

def extract_extreme_dates(group):
    # 获取最大值对应的索引和日期
    high_max_idx = group['High'].idxmax()
    high_date = group.loc[high_max_idx, 'Date']
    # 获取最小值对应的索引和日期
    low_min_idx = group['Low'].idxmin()
    low_date = group.loc[low_min_idx, 'Date']
    
    return pd.Series({
        'Year': group['Year'].iloc[0],
        'Qtr_Year': group['Qtr_Year'].iloc[0],
        'High': group['High'].max(),
        'Date_High': high_date,
        'Low': group['Low'].min(),
        'Date_Low': low_date
    })

weekly = df.groupby(['Year', 'Qtr_Year']).apply(extract_extreme_dates).reset_index(drop=True)

关于你尝试的df.loc方法

这种思路完全可行,本质上方法1就是把df.loc结合idxmax/idxmin的逻辑封装到了agg的lambda函数中,只要注意分组后idxmax返回的是原DataFrame的全局索引,直接用df.loc就能正确匹配到对应行的日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:24:54