Получить часть дня (утро, день, вечер, ночь) в датафрейме Python - PullRequest
2 голосов
/ 08 апреля 2019

Вот мой фрейм данных, мне нужно создать новый столбец, основанный на временном часе, на который будет похоже значение строки (утро, день, вечер, ночь)

DataFrame

Вот мой код

if ((prods['hour'] < 4) & (prods['hour'] > 8 )):
    prods['session'] = 'Early Morning'
elif ((prods['hour'] < 8) & (prods['hour'] > 12 )):
    prods['session'] = 'Morning'
elif ((prods['hour'] < 12) & (prods['hour'] > 16 )):
    prods['session'] = 'Noon'
elif ((prods['hour'] < 16) & (prods['hour'] > 20 )):
    prods['session'] = 'Eve'
elif ((prods['hour'] < 20) & (prods['hour'] > 24 )):
    prods['session'] = 'Night'
elif ((prods['hour'] < 24) & (prods['hour'] > 4 )):
    prods['session'] = 'Late Night'

Вот ошибка, которую я получил

ValueError Traceback (последний последний вызов) в ----> 1 if (prods ['hour']> 4 и prods ['hour'] <8): 2 prods ['session'] = 'Early Morning' 3 elif (prods ['hour']> 8 и prods ['hour'] <12): 4 prods ['session'] = 'Morning' 5 elif (prods ['hour']> 12 и prods ['hour'] <16): </p>

/ anaconda3 / lib / python3.7/site-packages/pandas/core/generic.py в ненулевой (self) 1476 повысить ValueError («Значение истинности {0} неоднозначно.» 1477 »Используйте a.empty, a.bool(), a.item (), a.any () или a.all (). "-> 1478 .format (self. class . name )) 1479 1480 bool = ненулевой

ValueError: Истинное значение Series является неоднозначным.Используйте a.empty, a.bool (), a.item (), a.any () или a.all ().

Пожалуйста, помогите

1 Ответ

3 голосов
/ 08 апреля 2019

Используйте cut или пользовательскую функцию с and, а также измените < на > и > на <=, а также для каждого значения добавьте return:

prods = pd.DataFrame({'hour':range(1, 25)})

b = [0,4,8,12,16,20,24]
l = ['Late Night', 'Early Morning','Morning','Noon','Eve','Night']
prods['session'] = pd.cut(prods['hour'], bins=b, labels=l)

def f(x):
    if (x > 4) and (x <= 8):
        return 'Early Morning'
    elif (x > 8) and (x <= 12 ):
        return 'Morning'
    elif (x > 12) and (x <= 16):
        return'Noon'
    elif (x > 16) and (x <= 20) :
        return 'Eve'
    elif (x > 20) and (x <= 24):
        return'Night'
    elif (x <= 4):
        return'Late Night'

prods['session1'] = prods['hour'].apply(f)
print (prods)
    hour        session       session1
0      1     Late Night     Late Night
1      2     Late Night     Late Night
2      3     Late Night     Late Night
3      4     Late Night     Late Night
4      5  Early Morning  Early Morning
5      6  Early Morning  Early Morning
6      7  Early Morning  Early Morning
7      8  Early Morning  Early Morning
8      9        Morning        Morning
9     10        Morning        Morning
10    11        Morning        Morning
11    12        Morning        Morning
12    13           Noon           Noon
13    14           Noon           Noon
14    15           Noon           Noon
15    16           Noon           Noon
16    17            Eve            Eve
17    18            Eve            Eve
18    19            Eve            Eve
19    20            Eve            Eve
20    21          Night          Night
21    22          Night          Night
22    23          Night          Night
23    24          Night          Night
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...