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

如何对Pandas DataFrame按Num分组统计首尾值及最值?

问题:Pandas分组获取首尾值及最值统计

现有如下Pandas DataFrame:

import pandas as pd

data = [
    [1, 188],
    [1, 258],
    [1, 386],
    [1, 385],
    [1, 386],
    [2, 111],
    [2, 253],
    [2, 812],
    [3, 936],
    [3, 121],
    [3, 273],
    [3, 554],
]

df = pd.DataFrame(data, columns=['Num', 'Val'])
print(df)

需要按Num分组,生成包含以下统计值的新DataFrame:

  • Val First:分组中Val的首个值
  • Val Last:分组中Val的最后一个值
  • Val Min:分组中Val的最小值
  • Val Max:分组中Val的最大值

期望输出如下:

df_new = pd.DataFrame({
    'Num': [1, 2, 3],
    'Val First': [188, 111, 936],
    'Val Last': [386, 812, 554],
    'Val Min': [188, 111, 121],
    'Val Max': [386, 812, 936]
})

df_new.columns = ["Num", "Val First", "Val Last", "Val Min", "Val Max"]

print(df_new)

目前已通过以下代码实现最值统计,但无法获取分组的首尾值:

df_new = df.groupby('Num').agg({'Val': ['min', 'max']})

解决方案

可以直接在agg方法中添加first和last来获取分组的首尾值,之后调整列名并重置索引即可匹配期望格式:

# 分组聚合,一次性获取首尾值及最值
df_new = df.groupby('Num')['Val'].agg(['first', 'last', 'min', 'max'])

# 重命名列名
df_new.columns = ['Val First', 'Val Last', 'Val Min', 'Val Max']

# 将Num从索引转为普通列
df_new = df_new.reset_index()

print(df_new)

执行后即可得到与期望一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:30:23