基于值计数替换列值出错:所有值变为Others的解决求助
问题排查与解决
问题根源
你代码里的核心错误是用了value_counts(normalize=True)——这个参数会返回各国家在列中的占比(数值在0到1之间),而非实际的计数数量。你要判断的是计数小于450,所有国家的占比自然都远小于450,导致所有行都被匹配,最终全部替换成了"Others"。
修正后的代码
删掉normalize=True,直接用value_counts()获取实际计数:
def collapse_category(df): # 获取各国家的实际计数,而非占比 count_map = df['Nationality'].value_counts() # 筛选计数小于450的国家,替换为Others df.loc[df['Nationality'].map(count_map) < 450, 'Nationality'] = 'Others' print(df['Nationality'].unique()) # 可选:打印替换后的计数分布,验证结果 print(df['Nationality'].value_counts())
额外说明
df['Nationality'].map(count_map)会把每个国家对应到它的计数,再和450比较就能精准筛选出需要替换的行。- 替换后可以通过
value_counts()检查结果,确认只有计数≥450的国家被保留,其余都合并为"Others"。
内容的提问来源于stack exchange,提问作者Karthik Bhandary
相关产品推荐
相关产品推荐

