Python Pandas:如何获取分组后的每组最小值?
解决方案
问题核心有两个:一是你的B列是字符串类型,数值比较会按字符串规则执行;二是transform('first')仅取每组的第一个元素,并非最小值。按以下步骤即可实现预期效果:
方法一:先转换列类型再分组取最小值
- 将
B列从字符串转为数值类型(确保数值比较逻辑正确) - 按
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
相关产品推荐
相关产品推荐

