У меня есть план данных наблюдений за климатом для 8 разных городов США.
Я пытаюсь найти количество тепловых волн (3 дня подряд с максимумом на уровне или выше 90 градусов) за каждый годдля каждого местоположения в наборе данных.
Я определяю волну жары как 3 дня подряд, но 3 дня подряд.Например:
If Aug. 8 hit 87
Aug. 9 hit 90
Aug. 10 hit 92
Aug. 11 hit 94
Aug. 12 hit 93
Aug. 13 hit 101
Aug. 14 hit 94
Aug. 15 hit 77
В столбце «HeatWave» 9 и 12 августа будут значения «1», отражающие 2 отдельных трехдневных периода, в которых максимальное значение достигло 90 или выше.
Моя текущая стратегия не работает с такими полосами дней.
Я пытался использовать np.where.Сначала я проверяю, достигла ли температура в этот день 90 или выше.Затем я проверяю заранее, чтобы увидеть, достиг ли максимума на уровне или выше 90 в течение следующих двух дней.Наконец, я проверяю два дня до того, чтобы увидеть, не содержит ли столбец HeatWave «1».Если все эти условия выполнены, в столбце «HeatWave» для строки помещается 1.
summer['Next90'] = summer.Max.shift(-1)
summer['Following90'] = summer.Max.shift(-2)
summer['HeatWave'] = 0
summer['HeatWave'] = np.where((summer['Next90']>=90) &
(summer['Max']>=90) & (summer['Following90']>=90) & (summer.shift(1)
['HeatWave']!=1) & (summer.shift(2)['HeatWave']!=1), 1, np.nan)
Проблема с этой последовательностью в том, что я не думаю, что np.where может проверить столбец «HeatWave» после того, как он просто поместил 1 (или np.nan) в предыдущей строке.Итак, я получаю много «1» в столбце «HeatWave», но в итоге последовательности засчитываются дважды.Я также попробовал это в цикле for, используя iterrows, но приземлился в той же борьбе.Кто-нибудь может предложить лучший способ пойти по этому поводу?