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

pandas dataframe按Month和Col2分组后取Val最大值对应Col1的实现方法

实现代码

首先导入pandas并构造你的示例数据:

import pandas as pd

df = pd.DataFrame({
    'Month': ['A', 'A', 'A', 'B', 'B', 'B'],
    'Col1': ['p', 'q', 'r', 'x', 'y', 'z'],
    'Col2': ['a1', 'a1', 'b2', 'a1', 'b2', 'b2'],
    'Val': [31, 78, 13, 54, 56, 65]
})

方法1:排序后分组取首行(逻辑直观)

# 按Val降序排序,确保每个分组的最大值排在最前面
df_sorted = df.sort_values('Val', ascending=False)
# 按Month、Col2分组,取每组第一行的Col1值
grouped = df_sorted.groupby(['Month', 'Col2'], as_index=False)['Col1'].first()
# 转为宽表,把Col2的值作为列名
result = grouped.pivot(index='Month', columns='Col2', values='Col1')\
                .reset_index()\
                .rename_axis(columns=None) # 去掉多余的列索引名

方法2:取最大值行索引(性能更优,适合大数据量)

# 取每个(Month, Col2)组内Val最大值对应的行索引
max_val_index = df.groupby(['Month', 'Col2'])['Val'].idxmax()
# 提取对应行数据后转宽表
result = df.loc[max_val_index, ['Month', 'Col2', 'Col1']]\
           .pivot(index='Month', columns='Col2', values='Col1')\
           .reset_index()\
           .rename_axis(columns=None)

两种方法输出的result都符合预期:

Montha1b2
Aqr
Bxz

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:36:02