如何提取dataframe中任意占比的Top数据并设置阈值完成筛选?
实现方案
你可以直接用pandas内置的分位数计算功能实现需求,无需手动存列表取值,代码更简洁高效,也可以按照你要求的先存列表再取阈值的逻辑实现,两种方案如下:
方案1:简便实现(推荐)
直接计算99分位数作为前1%的阈值,一步完成筛选:
import pandas as pd import seaborn as sns # 读入数据源 df = pd.read_csv("https://raw.githubusercontent.com/srptwice/forstack/main/resultat_projet.csv") # 计算整个DataFrame所有数值的99分位数,即前1%数值的最小临界值 threshold = df.stack().quantile(0.99) # 按照阈值筛选,和你原有硬编码50700的筛选逻辑完全一致 df4 = df[df > threshold]
如果需要按每列单独计算前1%阈值分别筛选,修改阈值计算逻辑即可:
# 按列计算99分位数 threshold = df.quantile(0.99) df4 = df[df > threshold]
方案2:按你要求的先存列表再取阈值的逻辑实现
import pandas as pd df = pd.read_csv("https://raw.githubusercontent.com/srptwice/forstack/main/resultat_projet.csv") # 把所有数值展平后降序排序 all_sorted_vals = df.stack().sort_values(ascending=False) # 取前1%的数值存入列表 top_1pct_list = all_sorted_vals[:int(len(all_sorted_vals)*0.01)].tolist() # 取列表第一个值作为阈值 threshold = top_1pct_list[0] # 筛选 df4 = df[df > threshold]
内容的提问来源于stack exchange,提问作者SRP
相关产品推荐
相关产品推荐

