Pandas如何处理部分重复行:保留行并替换为分组最值
如何在Pandas中按分组替换列值同时保留所有行?
当然有合适的方法!你需要的是groupby结合transform函数,这正是用来处理这种「保留所有行同时按分组替换列值」场景的利器。
步骤详解
首先先重现你的初始DataFrame:
import pandas as pd df = pd.DataFrame({ 'a': ['a','b','b','c'], 'b': [1,2,3,4], 'c': [2,3,4,1], 'd': [1.1,1.2,1.3,1.4] })
核心处理代码如下,直接修改原DataFrame的对应列:
# 按列'a'分组,将列'b'替换为分组最小值 df['b'] = df.groupby('a')['b'].transform('min') # 按列'a'分组,将列'c'替换为分组最大值 df['c'] = df.groupby('a')['c'].transform('max')
执行后得到的结果完全符合你的需求:
a b c d 0 a 1 2 1.1 1 b 2 4 1.2 2 b 2 4 1.3 3 c 4 1 1.4
为什么drop_duplicates和duplicated不适用?
你尝试的这两个函数都是用来识别或移除重复行的,而你的需求是保留所有行,仅修改指定列的值为分组的聚合结果,所以它们无法覆盖你的场景。
补充:不修改原DataFrame的写法
如果想保留原始数据,可以用assign链式操作生成新的DataFrame:
processed_df = df.assign( b=df.groupby('a')['b'].transform('min'), c=df.groupby('a')['c'].transform('max') )
transform函数的核心优势是:对每个分组执行聚合操作后,会将结果广播回原DataFrame的每一行,完美匹配「保留行数+替换分组聚合值」的需求。
内容的提问来源于stack exchange,提问作者pajamas
相关产品推荐
相关产品推荐

