首页 > 解决方案 > 带有 np.where、while 循环或嵌套 if 语句的条件变量

问题描述

我有以下土壤水分时间序列数据(代替时间戳的索引)。我试图确定初始大幅增加以及土壤在两个传感器处饱和时(sm2 和 sm8 加上 1 小时和 2 小时的值变化)。我正在使用 np.where 但我需要另外确定何时满足这些条件并继续在前 3 个值之上增加 >= 0.1,直到不满足该条件。我将它们分类为 water_release = 1 时为真,0 时为假以用于机器学习,因此需要将值输出到数据框中自己的列中,以便稍后拆分和测试数据。对于下面的数据,除最后三个之外的所有值都应标识为 1。我应该使用 for 循环、while 还是 if 语句?

分类代码:

manual['water_release1'] = np.where((manual['delta_sm2']>0.5) | (manual['delta_sm8']>0.5), 1, 0)
manual['water_release2'] = np.where((manual['delta_sm2_2h']>=1) | (manual['delta_sm8_2h']>=1), 1, 0)
manual['saturation'] = np.where((manual['sh_sm2_auto_%']>=39) & (manual['sh_sm8_auto_%']>=39), 1, 0)
manual['water_release_target'] = np.where((manual['water_release1'] == 1) | (manual['water_release2'] == 1) | (manual['saturation'] == 1), 1,0)

数据:

index       sm2     sm8     sm20    delta_sm2   delta_sm2_2h    delta_sm8   delta_sm8_2h
    2170    21.3    31.79   40.15   2.25    2.25    0.14    0.14
    2171    28.1    32.8    40.3    6.80    9.05    1.0     1.14
    2172    33.9    34.1    40.4    5.79    12.59   1.30    2.30
    2173    35.2    34.8    40.4    1.30    7.10    0.69    2.0
    2174    35.95   37.45   40.4    0.75    2.05    2.65    3.35
    2175    36.59   40.2    40.4    0.64    1.39    2.75    5.40
    2176    36.9    40.65   40.4    0.30    0.94    0.45    3.20
    2177    37.25   40.7    40.4    0.35    0.65    0.04    0.5
    2178    37.5    40.7    40.4    0.25    0.60    0.0     0.04
    2179    37.55   40.75   40.4    0.04    0.29    0.04    0.04
    2180    37.7    40.8    40.4    0.15    0.20    0.04    0.09
    2181    37.9    40.8    40.4    0.19    0.35    0.0     0.04
    2182    38.05   40.8    40.4    0.14    0.34    0.0     0.0
    2183    38.1    40.8    40.4    0.05    0.20    0.0     0.0
    2184    38.15   40.8    40.4    0.05    0.10    0.0     0.0
    2185    38.25   40.8    40.4    0.09    0.14    0.0     0.0
    2186    38.5    40.84   40.4    0.25    0.34    0.04    0.04
    2187    38.75   40.9    40.4    0.25    0.5     0.05    0.10
    2188    38.8    40.9    40.4    0.04    0.29    0.0     0.05
    2189    38.84   40.9    40.4    0.04    0.09    0.0     0.0
    2190    38.9    40.9    40.4    0.05    0.10    0.0     0.0
    2191    38.9    40.9    40.4    0.0     0.056   0.0     0.0
    2192    38.9    40.9    40.4    0.0     0.0     0.0     0.0
    2193    38.95   40.9    40.4    0.05    0.05    0.0     0.0
    2194    38.95   40.9    40.4    0.0     0.05    0.0     0.0
    2195    38.95   40.9    40.4    0.0     0.0     0.0     0.0
    2196    38.15   40.9    40.4    -0.80   -0.80   0.0     0.0
    2197    38.95   40.9    40.4    -2.39   -3.20   0.0     0.0
    2198    33.3    40.9    40.4    -2.45   -4.85   0.0     0.0
    2199    31.6    40.9    40.4    -1.69   -4.14   0.0     0.0
    2200    30.15   40.9    40.4    -1.45   -3.14   0.0     0.0

标签: pythonfor-loopif-statementwhile-looptime-series

解决方案


推荐阅读