Пытаюсь решить это в pandas

#python-3.x #pandas

#python-3.x #pandas

Вопрос:

У меня есть некоторые данные в файле Excel. Есть 2 столбца:

  • time_pull: отметка времени
  • value_diff: одна из мер

Мне нужно создать 3-й столбец (alert или нет) на основе столбца value_diff . Если 5 последовательных строк имеют значение> 10, то создается предупреждение или нет

 time_pull value_diff    alert
3/1/19 0:44 0.110001    No Alert
3/1/19 0:45 1.089996    No Alert
3/1/19 0:46 13.449997   No Alert
3/1/19 0:47 11.779999   No Alert
3/1/19 0:48 10.869995   No Alert
3/1/19 0:49 11.470001   No Alert
3/1/19 0:50 12.000000   Alert
3/1/19 0:51 0.010002    No Alert
3/1/19 0:52 1.080002    No Alert
3/1/19 0:53 0.119995    No Alert
  
 df['alert'] = np.where((df['value_diff'] > 10 
              (df['value_diff'].shift(-1) > 10) amp; 
              (df['value_diff'].shift(-2) > 10)
              amp; (df['value_diff'].shift(-3) > 10) amp; 
              (df['value_diff'].shift(-4) > 10)),"Alert","No Alert")
  

Ответ №1:

Вы можете сделать это rolling с помощью .min() :

 >>> df
            time_pull  value_diff
0 2019-03-01 00:44:00    0.110001
1 2019-03-01 00:45:00    1.089996
2 2019-03-01 00:46:00   13.449997
3 2019-03-01 00:47:00   11.779999
4 2019-03-01 00:48:00   10.869995
5 2019-03-01 00:49:00   11.470001
6 2019-03-01 00:50:00   12.000000
7 2019-03-01 00:51:00    0.010002
8 2019-03-01 00:52:00    1.080002
9 2019-03-01 00:53:00    0.119995

>>> mask = df["value_diff"].rolling(5).min() >= 10
>>> mask.map({True: "Alert", False: "No Alert"})
0    No Alert
1    No Alert
2    No Alert
3    No Alert
4    No Alert
5    No Alert
6       Alert
7    No Alert
8    No Alert
9    No Alert