You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 06:45:03