我有一个具有以下值的数据框。我想确定日期,当低点低于 SMA8Low 时。
pH - 42752 -- 2.13 V, Tds: 0 -- 0.0 V
pH - 43968 -- 2.16 V, Tds: 17280 -- 0.0 V
pH - 42176 -- 2.18 V, Tds: 23296 -- 1.13 V
pH - 43392 -- 2.16 V, Tds: 0 -- 0.0 V
pH - 43648 -- 2.19 V, Tds: 18112 -- 0.0 V
pH - 43456 -- 2.2 V, Tds: 22720 -- 1.09 V
pH - 43200 -- 2.14 V, Tds: 0 -- 0.39 V
pH - 43456 -- 2.22 V, Tds: 640 -- 0.0 V
pH - 43072 -- 2.17 V, Tds: 21568 -- 0.09 V
pH - 43648 -- 2.18 V, Tds: 16960 -- 1.17 V
pH - 44160 -- 2.14 V, Tds: 0 -- 0.0 V
pH - 43840 -- 2.18 V, Tds: 17216 -- 0.0 V
pH - 42688 -- 2.18 V, Tds: 23744 -- 1.11 V
pH - 43520 -- 2.18 V, Tds: 1472 -- 0.6 V
pH - 43328 -- 2.22 V, Tds: 0 -- 0.02 V
pH - 43200 -- 2.15 V, Tds: 18240 -- 0.0 V
pH - 42688 -- 2.16 V, Tds: 14592 -- 1.13 V
pH - 44096 -- 2.17 V, Tds: 0 -- 0.0 V
pH - 43968 -- 2.17 V, Tds: 13376 -- 0.0 V
pH - 43200 -- 2.19 V, Tds: 22144 -- 1.09 V
pH - 43264 -- 2.21 V, Tds: 0 -- 0.0 V
pH - 43520 -- 2.17 V, Tds: 17088 -- 0.0 V
pH - 42304 -- 2.19 V, Tds: 13952 -- 1.19 V
以上代码后的Dataframe结果如下:
如果昨天是真的,今天是真的,那么现在新的列交叉应该只为真。
我尝试了以下代码:
df['SMA10High'] = df.loc[:,'High'].rolling(window=10).mean()
df['SMA8Low'] = df.loc[:,'Low'].rolling(window=8).mean()
df['yesterday'] = df['Low'].shift(1) >= df['SMA8Low'].shift(1) #yesterdays
LOW >= SMA8Low
df['today'] = df['Low'] <= df['SMA8Low'] #Todays Low <= SMA8Low
df.dropna(inplace=True) #droping NaN values
但结果是错误的。只有以下日期在列交叉中应为 True: 2021-01-08 和 2021-01-22
答案 0 :(得分:0)
只需向 np.where
添加另一个条件:
df['crossover'] = np.where(df['today'] & (df['yesterday'] == df['today']),True,True)
答案 1 :(得分:0)
解决办法是: df['crossover'] = np.where(df['today'] & (df['yesterday'] == df['today']),True,False)
df['SMA10High'] = df.loc[:,'High'].rolling(window=10).mean()
df['SMA8Low'] = df.loc[:,'Low'].rolling(window=8).mean()
df['yesterday'] = df['Low'].shift(1) >= df['SMA8Low'].shift(1) #yesterdays LOW >=
SMA8Low
df['today'] = df['Low'] <= df['SMA8Low'] #Todays Low <= SMA8Low
df.dropna(inplace=True) #droping NaN values
df['crossover'] = np.where(df['today'] & (df['yesterday'] == df['today']),True,False)