如何在Python Pandas DataFrame代码中识别并处理多个众数
解决Pandas多众数场景下的替换问题
你的代码在单个众数场景下能正常运行,但遇到多个频率相同的众数时,只会保留第一个众数,其他众数会被错误替换成'Other'。要处理这种情况,需要先找出所有频率最高的众数,再执行替换操作。
修改后的完整代码
import numpy as np import pandas as pd data19 = np.random.randint(46,50,size = 10) df19 = pd.DataFrame(data19, columns = ["integer"]) print("原始DataFrame:") print(df19) freq19 = df19["integer"].value_counts() print("\n频率统计:") print(freq19) # 找出所有频率等于最高频率的众数 max_freq = freq19.max() modes = freq19[freq19 == max_freq].index # 判断每个值是否属于众数集合 find_mode = df19["integer"].isin(modes) # 替换非众数为'Other' df19.loc[~find_mode, "integer"] = "Other" print("\n处理后的DataFrame:") print(df19)
关键修改说明
- 先通过
freq19.max()获取最高频率值,再筛选出所有频率等于该值的索引,得到全部众数,而非仅取第一个。 - 使用
isin(modes)判断元素是否属于众数集合,能同时匹配多个众数,避免遗漏。
比如当随机序列中有两个众数(如46和47都出现3次,为最高频率),修改后的代码会保留这两个值,仅替换其他值为'Other'。
内容的提问来源于stack exchange,提问作者ronzenith
相关产品推荐
相关产品推荐

