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

Pandas如何将Final列中小于负变量v的值替换为v,其余保留原值

需求实现方案

已知参数m = 170000,经计算阈值v = -(m/100) = -1700,我们需要将DataFrame的Final列中所有小于-1700的值替换为-1700,其余值保留原值。


完整前置代码(数据构造)

import pandas as pd
import numpy as np

# 定义参数
m = 170000
v = -(m/100)
# 如需v为整数类型,可修改为 v = -int(m/100),避免结果出现浮点数后缀

# 原始数据集
data_dict = {'01-09-2021': 631, '02-09-2021': -442, '08-09-2021': 6, '09-09-2021': 1528, '13-09-2021': 2042, '14-09-2021': 1098, '15-09-2021': -2092, '16-09-2021': -6718, '20-09-2021': -595, '22-09-2021': 268, '23-09-2021': -2464, '28-09-2021': 611, '29-09-2021': -1700, '30-09-2021': 4392}

# 构造DataFrame,日期为索引,值列命名为Final
df = pd.DataFrame.from_dict(data_dict, orient='index', columns=['Final'])

三种正确实现方式

方式1:使用numpy.where(通用条件判断写法)

之前使用失败大概率是没有赋值回原列、或者条件写反,正确写法如下:

df['Final'] = np.where(df['Final'] < v, v, df['Final'])

方式2:使用df.loc定位赋值

df.loc[df['Final'] < v, 'Final'] = v

方式3:使用pandas自带clip方法(阈值截断场景最简洁)

直接指定下限为v即可自动完成小于下限的值替换:

df['Final'] = df['Final'].clip(lower=v)

处理结果验证

处理后Final列中原本小于-1700的-2092、-6718、-2464三个值会被替换为-1700,其余值保持不变,最终输出如下:

日期Final
01-09-2021631
02-09-2021-442
08-09-20216
09-09-20211528
13-09-20212042
14-09-20211098
15-09-2021-1700
16-09-2021-1700
20-09-2021-595
22-09-2021268
23-09-2021-1700
28-09-2021611
29-09-2021-1700
30-09-20214392

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:48:03