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

向量化方法处理DataFrame:匹配Value1并按上一行值更新Value2

问题核心与解决办法

直接用==比较浮点数会触发精度问题——比如数据里的0.0016实际存储可能是0.0015999999999999998这类近似值,导致你的条件永远匹配不到,结果全是nan。

另外你原来的代码会把非目标行的Value2改成nan,应该保留原数值,只修改Value1近似等于0.0016的行。

修改后的向量化代码

方法一:用diff判断趋势

import numpy as np
import pandas as pd

# 加载你的数据(示例用样本数据)
df = pd.DataFrame({
    'DateTime': ['8/15/2022 10:47', '8/15/2022 10:48', '8/15/2022 10:49'],
    'Value1': [0.00151, 0.0016, 0.00168],
    'Value2': [0, 1, 1]
})

df['Value3'] = df['Value1'].diff()
# 用np.isclose做浮点数近似匹配,非目标行保留原Value2
df['Value2'] = np.where(
    np.isclose(df['Value1'], 0.0016, atol=1e-6),  # 设置容差避免精度问题
    np.where(df['Value3'] <= 0, 0, 1),
    df['Value2']
)

方法二:用shift直接比较前一行

df = pd.DataFrame({
    'DateTime': ['8/16/2022 13:38', '8/16/2022 13:39', '8/16/2022 13:40'],
    'Value1': [0.00163, 0.0016, 0.00157],
    'Value2': [1, 0, 0]
})

df['Value2'] = np.where(
    np.isclose(df['Value1'], 0.0016, atol=1e-6),
    np.where(df['Value1'].shift(1) <= df['Value1'], 0, 1),
    df['Value2']
)

验证效果

  • 情况1的目标行:前一行Value1=0.00151 ≤ 0.0016,Value2被改为0
  • 情况2的目标行:前一行Value1=0.00163 > 0.0016,Value2被改为1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:45:52