如何使用pandas提取DataFrame每行前20%数值对应的列名
pandas实现行维度前20%数值列名提取
完整实现代码
import pandas as pd # 1. 构造示例DataFrame,实际使用时替换为你自己的数据源即可 df = pd.DataFrame({ 'i1': [4], 'i3': [2], 'i4': [1], 'i9': [4], 'i14': [1], 'i16': [3], 'i17': [3], 'i18': [4], 'i19': [2], 'i20': [2], 'i22': [4], 'i26': [1], 'i27': [4], 'i28': [3] }) def get_top20_columns(row): # 计算当前行80分位数作为前20%数值的筛选阈值 # interpolation='higher'保证阈值取到刚好覆盖前20%的最小数值,匹配示例输出 threshold = row.quantile(q=0.8, interpolation='higher') # 返回符合条件的列名列表 return row[row >= threshold].index.tolist() # 2. 对DataFrame所有行执行处理,结果存储到新列top_20_cols中 df['top_20_cols'] = df.apply(get_top20_columns, axis=1) # 输出第一行结果验证,和预期完全一致:['i1', 'i9', 'i18', 'i22', 'i27'] print(df.iloc[0]['top_20_cols'])
说明
- 如果需要单独获取所有行的处理结果,直接调用
df['top_20_cols'].tolist()即可得到嵌套列表格式的结果 - 可根据需求调整
quantile的q参数修改筛选比例,比如要取前30%就把q改成0.7即可
内容的提问来源于stack exchange,提问作者Andrea Longoni
相关产品推荐
相关产品推荐

