You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame中计数<100的唯一值分组为‘其他’优化可视化?

解决方法:将低频类别合并为"Other"并可视化

我之前也碰到过这种类别太多导致图表拥挤难读的情况,把低频类别合并成一组是非常实用的优化技巧。下面就用Python的pandas和可视化库来一步步实现你的需求:

步骤1:计算频次并筛选高频类别

首先先拿到country列的频次统计,然后定位出那些计数≥100的类别:

import pandas as pd
import matplotlib.pyplot as plt

# 假设你的DataFrame名为wine
country_counts = wine['country'].value_counts()

# 筛选出计数≥100的国家类别
high_freq_countries = country_counts[country_counts >= 100]

步骤2:合并低频类别为"Other"

接下来把所有计数不足100的类别总和算出来,和高频类别合并成一个新的统计Series:

# 计算所有低频类别的总数量
other_total = country_counts[country_counts < 100].sum()

# 合并高频类别和"Other"组
# 注意:pandas 2.0+已弃用append,推荐用concat
combined_counts = pd.concat([high_freq_countries, pd.Series({'Other': other_total})])

# 如果你用的是旧版pandas,也可以用append:
# combined_counts = high_freq_countries.append(pd.Series({'Other': other_total}))

步骤3:绘制清晰的条形图

现在就可以用这个合并后的统计数据来画条形图了:

# 绘制基础条形图
combined_counts.plot(kind='bar', figsize=(12, 6), title='Wine Country Distribution (Low-Frequency Merged to "Other")')
plt.xlabel('Country')
plt.ylabel('Count')
plt.xticks(rotation=45, ha='right')  # 旋转x轴标签避免重叠
plt.tight_layout()
plt.show()

可选:用Seaborn实现更美观的可视化

如果你偏好Seaborn的风格,也可以先给原始DataFrame新增一列标记合并后的类别,再画图:

import seaborn as sns

# 新增列:把低频国家标记为"Other"
wine['country_grouped'] = wine['country'].apply(lambda x: x if x in high_freq_countries.index else 'Other')

# 用Seaborn绘制计数条形图
plt.figure(figsize=(12,6))
sns.countplot(data=wine, x='country_grouped', order=combined_counts.index)
plt.title('Wine Country Distribution (Low-Frequency Merged to "Other")')
plt.xlabel('Country')
plt.ylabel('Count')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

这样处理后,图表既不会因为类别过多显得杂乱,又保留了主要类别的数据信息,低频类别统一归为"Other"后可读性会大幅提升。

内容的提问来源于stack exchange,提问作者yupper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 19:27:59