Pandas如何不改变原行顺序新增列标记D列数值处于前10%的行
解决方案
方法1:无需排序,直接用分位数计算(推荐)
直接调用Pandas内置的分位数计算方法,完全不会改变原有DataFrame的行顺序,代码简洁效率高,适配1万+行的数据集无压力:
# 计算D列的90%分位数:表示D列90%的数值都低于该阈值,高于阈值即属于前10%范围 threshold = df['D'].quantile(0.9, method='higher') # 直接生成E列布尔值 df['E'] = df['D'] >= threshold
如果需要调整分界处重复值的包含逻辑,可以修改method参数,可选值有nearest/lower/higher/midpoint,按需选择即可。
方法2:排序实现(不改变原有顺序)
如果一定要用排序逻辑实现,可以只拿排序后的索引做赋值,不修改原DataFrame的顺序:
# 先初始化E列全为False df['E'] = False # 计算前10%对应的行数 n_top = int(len(df) * 0.1) # 仅提取排序后前10%行的原始索引,不修改原df结构 top_index = df.sort_values('D', ascending=False).head(n_top).index # 给对应索引的行赋值E列为True df.loc[top_index, 'E'] = True
原代码错误说明
iloc仅接收「行位置, 列位置」两个参数,你写了三个参数属于语法错误iloc[:0]表示取第0行之前的内容,也就是空行,自然赋值无效- 直接把排序后的df赋值给原变量,覆盖了原有行顺序
内容的提问来源于stack exchange,提问作者Muds
相关产品推荐
相关产品推荐

