如何在Pandas中按分组将列值替换为组内最频繁值?
Pandas:按ID分组将category替换为组内最频繁值
核心代码实现
先构造示例数据:
import pandas as pd df = pd.DataFrame({ 'ID': [1,1,1,1,2,2,2,2,3,3,3,3], 'category': ['A','A','B','A','A','A','B','B','B','B','C','A'] })
执行替换操作的核心代码:
df['category'] = df.groupby('ID')['category'].transform(lambda x: x.value_counts().idxmax())
代码解释
groupby('ID'):按ID字段对数据分组,确保每个组内都是同一ID的记录transform:保留原DataFrame的行结构,将每个组的计算结果映射回对应行,避免分组后数据维度变化x.value_counts().idxmax():对每个组的category列统计各值出现频次,取频次最高的值(众值);若多个值频次相同,idxmax()会返回第一个出现的众值,符合题目"任意值均可"的要求
执行结果
运行代码后,输出的DataFrame如下:
ID category 0 1 A 1 1 A 2 1 A 3 1 A 4 2 B 5 2 B 6 2 B 7 2 B 8 3 B 9 3 B 10 3 B 11 3 B
内容的提问来源于stack exchange,提问作者Fredrik
相关产品推荐
相关产品推荐

