Python如何绘制仅展示累积频率≤40%数据的条件累积频率直方图
Python实现筛选累积频率≤40%数据绘制直方图
核心逻辑
要过滤掉尾部无价值的大数值,必须先对原始数据做升序排序,再逐行计算累积值占总数值和的比例,最后筛选出累积比例不超过40%的子集用于绘图,避免未排序状态下累积占比计算错乱导致的筛选错误。
完整实现代码
import pandas as pd import matplotlib.pyplot as plt # 替换为你自己的原始数据集即可 raw_data = pd.Series([1738, 2200, 1338, 1222, 939, 898]) # 升序排序,保证小值在前、大值在后,尾部为待丢弃的大值 sorted_data = raw_data.sort_values(ascending=True).reset_index(drop=True) # 计算逐行累积频率 cumulative_percent = 100 * sorted_data.cumsum() / sorted_data.sum() # 筛选累积频率≤40%的子集 filtered_data = sorted_data[cumulative_percent <= 40] # 绘制直方图 plt.hist(filtered_data, bins='auto', edgecolor='black') plt.xlabel('数值') plt.ylabel('频数') plt.title('累积占比≤40%数据分布直方图') plt.show()
注意事项
- 你之前的计算逻辑没有对原始数据排序,得到的累积占比不随数值大小递进,截断后会错误混入大值、漏掉小值,无法达到过滤尾部大值提升可读性的目的。
- 如果需要对截断边界做平滑处理,可以根据需求调整阈值,或者对刚超过40%的边界值做插值保留,常规分析场景直接布尔筛选即可满足需求。
- 用你给出的子样本测试,排序后数据为
[898, 939, 1222, 1338, 1738, 2200],最终筛选得到的子集为前3个小值,对应的累积占比约为37%,符合截断要求。
内容的提问来源于stack exchange,提问作者SARA
相关产品推荐
相关产品推荐

