向量化方法处理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
相关产品推荐
相关产品推荐

