2017-02-21 34 views
2

Я хочу создать новый столбец. Столбец должен состоять из части дня, например «Утро», «Вторая половина дня», «Вечер» и «Ночь». У меня есть колонка под названием «DepTime», которая состоит из армейского времени. Используя это в качестве условия:Создание нового столбца «объект»

Утреннее 500 до 1159

Afternoon 1200 до 1659

вечер 1700 до 2059

Ночь 2100 на 400

Я хочу создать новый столбец например:

Output[]: 
     DepTime PartofDay 
      1300  Noon 
      2400  Night 

Он выдает сообщение об ошибке но я пробовал это следующим образом:

for time in flight_data["DepTime"]: 
    if flight_data_explored[time].map(lambda x: 500 if x > 1 else 1159): 
      flight_data_explored["PartofDay"] = "Morning" 

Есть ли способ, чтобы сделать такое состояние. Помощь будут оценены

ответ

4

Вы можете использовать numpy.where с between:

mask1 = df.DepTime.between(500, 1159) 
mask2 = df.DepTime.between(1200,1659) 
mask3 = df.DepTime.between(1700,2059) 

df['PartofDay1'] = np.where(mask1, 'Morning', 
        np.where(mask2, 'Afternoon', 
        np.where(mask3, 'Evening', 'Night'))) 

print (df) 
    DepTime PartofDay PartofDay1 
0  1300  Noon Afternoon 
1  2400  Night  Night 
+0

Эй спасибо, это работает! но одна вещь, когда я пытался создать маску4 для «Ночи», она выдает ошибку ... howcome Я не могу создать mask4 с «Ночью»? @jezrael –

+1

Тогда нужно 'mask4 = df.DepTime.between (2100,2400) | df.DepTime.between (0,400) ', но это необязательно;) – jezrael

+0

У меня была вторая проблема, с которой я пометил вас, если ее не так сильно, как вы думаете, посмотрите @jezrael –

1

Вот еще одно решение:

данных:

In [69]: df 
Out[69]: 
    DepTime 
0  0 
1  400 
2  500 
3  1100 
4  1200 
5  1600 
6  1700 
7  1900 
8  2100 
9  2359 

Решение:

bins = [0, 700, 1200, 1600, 2400] 
labels = ['Morning','Afternoon','Evening','Night'] 

df['PartofDay'] = pd.cut(df.DepTime - 500 + 2400*(df.DepTime < 500), 
         bins=bins, 
         labels=labels, 
         right=False) 

Результат:

In [71]: df 
Out[71]: 
    DepTime PartofDay 
0  0  Night 
1  400  Night 
2  500 Morning 
3  1100 Morning 
4  1200 Afternoon 
5  1600 Afternoon 
6  1700 Evening 
7  1900 Evening 
8  2100  Night 
9  2359  Night 

 Смежные вопросы

  • Нет связанных вопросов^_^