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

Python Pandas:如何获取分组后的每组最小值?

解决方案

问题核心有两个:一是你的B列是字符串类型,数值比较会按字符串规则执行;二是transform('first')仅取每组的第一个元素,并非最小值。按以下步骤即可实现预期效果:

方法一:先转换列类型再分组取最小值

  1. 将B列从字符串转为数值类型(确保数值比较逻辑正确)
  2. 按A分组后,用transform('min')将每组最小值广播到原DataFrame的每一行

代码示例:

import pandas as pd

df = pd.DataFrame({
    'A': ['foo', 'foo', 'bar', 'bar', 'bar'],
    'B': ['1', '2', '2', '4', '1']
})

# 转换B列为整数类型
df['B'] = df['B'].astype(int)
# 分组获取每组最小值并替换原列
df['B'] = df.groupby('A')['B'].transform('min')

print(df)

执行后输出:

A  B
0  foo  1
1  foo  1
2  bar  1
3  bar  1
4  bar  1

方法二:分组时临时转换类型(不提前修改原列)

如果不想提前修改B列的类型,可以在分组的lambda函数中临时转换并取最小值:

df['B'] = df.groupby('A')['B'].transform(lambda x: x.astype(int).min())

此方法最终也会将B列转为数值类型,得到与方法一完全一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:58:13