#python #pandas #numpy
#python #pandas #numpy
Вопрос:
У меня есть фрейм данных, как показано ниже:
d={
'Date' :['2016-10-30','2016-10-30','2016-11-01','2016-10-30'],
'Time':['09:58:11', '10:05:34', '10:07:57', '11:15:32'],
'Transaction':[2,3,1,1]
}
df=pd.DataFrame(d, columns=['Date','Time','Transaction'])
Мне нужно создать новую переменную как Time_Group . Для (6,11] — это «Утро», для (11,17] — «День», а для (17,20] — «Вечер» для данных Time_group . Как создать эту переменную с помощью столбца времени?
Ответ №1:
Использование pd.cut
с pd.Timedelta
:
u = df.assign(Time=pd.to_timedelta(df['Time']))
bins = [6,11,17,20]
labels = ['Morning','Afternoon','Evening']
u = u.assign(Time_Group=pd.cut(u['Time'],[pd.Timedelta(hours=i) for i in bins],
labels=labels))
print(u)
Date Time Transaction Time_Group
0 2016-10-30 09:58:11 2 Morning
1 2016-10-30 10:05:34 3 Morning
2 2016-11-01 10:07:57 1 Morning
3 2016-10-30 11:15:32 1 Afternoon
Комментарии:
1. Здравствуйте, здесь 4-й raw должен быть утром, но, похоже, днем. Как это исправить?
2. @user14815110 в своем вопросе вы написали, что 11-17 должно быть днем. Следовательно, 4-я строка — вторая половина дня, так как прошло 15 минут 11.to измените время вы можете просто изменить список ячеек с 11 на 12 например, чтобы начать вторую половину дня с
Ответ №2:
Вы можете использовать это —
d={
'Date' :['2016-10-30','2016-10-30','2016-11-01','2016-10-30'],
'Time':['09:58:11', '10:05:34', '10:07:57', '11:15:32'],
'Transaction':[2,3,1,1]
}
df=pd.DataFrame(d, columns=['Date','Time','Transaction'])
def time_group(inp):
inp = datetime.datetime.strptime(inp[0], "%H:%M:%S")
a = datetime.datetime.strptime("06:00:00", "%H:%M:%S")
b = datetime.datetime.strptime("11:00:00", "%H:%M:%S")
c = datetime.datetime.strptime("17:00:00", "%H:%M:%S")
d = datetime.datetime.strptime("20:00:00", "%H:%M:%S")
if a < inp <= b:
return 'Morning'
elif b < inp < c:
return 'Afternoon'
elif c < inp < d:
return 'Night'
>>> df[['Time']].apply(time_group,axis=1)
0 Morning
1 Morning
2 Morning
3 Afternoon
dtype: object