Pandas如何获取DataFrame列唯一值及对应出现占比
获取DataFrame指定列唯一值及对应出现百分比的实现方案
你推测的方向是对的,直接用value_counts()方法即可实现需求,不需要额外写循环统计。
核心代码
value_counts()自带normalize参数,开启后会直接返回每个值的出现占比(取值范围0~1),乘100即可得到百分比数值:
# 基础用法:返回每个唯一值的占比 ratio_series = df["prices"].value_counts(normalize=True) # 转成百分比格式 percent_series = df["prices"].value_counts(normalize=True) * 100
返回结果是一个Series结构:索引为列的所有唯一值,对应的值为该值的占比/百分比,默认按照出现频次从高到低排序。
常用扩展用法
- 如果你需要结果的排列顺序和
df.prices.unique()完全一致(即按值在列中第一次出现的顺序排列,而非按频次降序),加上sort=False参数即可:percent_series = df["prices"].value_counts(normalize=True, sort=False) * 100 - 如果需要把列中的空值
NaN也纳入统计(默认会自动忽略空值),加上dropna=False参数:percent_with_na = df["prices"].value_counts(normalize=True, dropna=False) * 100 - 如果需要转成易读的字典、列表格式,直接调用对应转换方法:
# 转成 {唯一值: 百分比} 的字典格式 percent_dict = percent_series.to_dict() # 转成 [(唯一值, 百分比), ...] 的列表格式 percent_list = list(percent_series.items())
结果示例
针对你举例的prices列,输出的百分比结果格式参考如下:
1030 14.29 1075 14.29 2010 14.29 3000 14.29 3050 14.29 4050 14.29 4550 14.28 Name: prices, dtype: float64
内容的提问来源于stack exchange,提问作者Derrick Kuria
相关产品推荐
相关产品推荐

