Классифицируйте тип осадков по значениям температуры и значению осадков (фрейм данных python)

#python #python-3.x #dataframe #function #categories

Вопрос:

У меня есть рамка данных для температуры, осадков:

фрейм данных

Я хочу классифицировать осадки по следующим типам;

 * 0: No precipitation * 1: Snow * 2: Mixed snow and rain * 3: Rain * 4: Drizzle * 5: Freezing rain * 6: Freezing drizzle  

Я попробовал следующую функцию:

 def func(x):  if smhi['Temperature'] lt; -8 and smhi['Precipitation'] gt; 1 : smhi['PreciCateg'] = '1'  elif smhi['Temperature'] lt; -2 and smhi['Precipitation'] gt; 1 : smhi['Temperature'] = '2'  elif smhi['Temperature'] lt; 30 and smhi['Precipitation'] gt;= 1 : smhi['PreciCateg'] = '3'  elif smhi['Temperature'] lt; 20 and smhi['Precipitation'] lt; 1 : smhi['Temperature'] = '4'  elif smhi['Temperature'] lt; 5 and smhi['Precipitation'] gt; 0.5 : smhi['PreciCateg'] = '5'  elif smhi['Temperature'] lt; 5 and smhi['Precipitation'] gt; 0.2 : smhi['Temperature'] = '6'  else: smhi['PreciCateg'] = '0' smhi['PreciCateg'] = smhi.apply(func)  

Я получаю:

Ошибка значения: Значение истинности ряда неоднозначно. Используйте.empty, a.bool(), a.item(), a.any() или a.all().

Я думаю, что я перепутал логику классификации!?

Комментарии:

1. Вы пытаетесь создать новую колонку под названием «PreciCateg»? Если да, то почему вы присваиваете значения столбцу «Температура» в своей функции?

Ответ №1:

Воспользуйся numpy.select :

 import numpy as np  conditions = [smhi["Temperature"].lt(-8) amp; smhi["Precipitation"].gt(1),  smhi["Temperature"].lt(-2) amp; smhi["Precipitation"].gt(1),  smhi["Temperature"].lt(30) amp; smhi["Precipitation"].ge(1),  smhi["Temperature"].lt(20) amp; smhi["Precipitation"].lt(1),  smhi["Temperature"].lt(5) amp; smhi["Precipitation"].gt(0.5),  smhi["Temperature"].lt(5) amp; smhi["Precipitation"].gt(0.2)]  smhi["PreciCateg"] = np.select(conditions, [1,2,3,4,5,6], 0)  gt;gt;gt; smhi  Temperature Precipitation Wind Speed timestamp PreciCateg 0 -1.33 0.17 2.61 2017-1-1 0:00:00 4 1 -1.93 0.07 2.06 2017-1-1 1:00:00 4 2 -2.39 0.02 1.98 2017-1-1 2:00:00 4 3 -2.57 0.01 2.24 2017-1-1 3:00:00 4 4 -3.23 0.00 2.18 2017-1-1 4:00:00 4  

Комментарии:

1. Спасибо @not_speshal, все получилось!