вот код для примера набора данных, который у меня есть
data={'ID':[4,4,4,4,22,22,23,25,29],
'Zone':[32,34,21,34,27,29,32,75,9],
'checkin_datetime':['04-01-2019 13:07','04-01-2019 13:09','04-01-2019 14:06','04-01-2019 14:55','04-01-2019 20:23'
,'04-01-2019 21:38','04-01-2019 21:38','04-01-2019 23:22','04-02-2019 01:00'],
'checkout_datetime':['04-01-2019 13:09','04-01-2019 13:12','04-01-2019 14:07','04-01-2019 15:06','04-01-2019 21:32'
,'04-01-2019 21:42','04-01-2019 21:45','04-02-2019 00:23','04-02-2019 06:15']
}
df = pd.DataFrame(data,columns= ['ID','Zone', 'checkin_datetime','checkout_datetime'])
df['checkout_datetime'] = pd.to_datetime(df['checkout_datetime'])
df['checkin_datetime'] = pd.to_datetime(df['checkin_datetime'])
Используя этот набор данных, я пытаюсь создать следующий набор данных
Checked_in_hour ID Zone checked_in_minutes
01-04-2019 13:00 4 32 2
01-04-2019 13:00 4 34 3
01-04-2019 14:00 4 21 1
01-04-2019 14:00 4 34 5
01-04-2019 15:00 4 34 6
01-04-2019 20:00 22 27 37
01-04-2019 20:00 22 27 8
01-04-2019 20:00 22 27 37
01-04-2019 21:00 22 29 4
01-04-2019 21:00 23 32 7
01-04-2019 23:00 25 75 38
02-04-2019 00:00 25 75 24
02-04-2019 01:00 29 9 60
02-04-2019 02:00 29 9 60
02-04-2019 03:00 29 9 60
02-04-2019 04:00 29 9 60
02-04-2019 05:00 29 9 60
02-04-2019 06:00 29 9 16
Где Checked in hour рассчитывается путем вычитания checkin_datetime и checkout_datetime, а время группируется по часам и Zone
Это код, который у меня есть, который вычисляет его на уровне Checked_in_hour, который мне нужно добавить в переменную зоны
#working logic
df2 = pd.DataFrame(
index=pd.DatetimeIndex(
start=df['checkin_datetime'].min(),
end=df['checkout_datetime'].max(),freq='1T'),
columns = ['is_checked_in','ID'], data=0)
for index, row in df.iterrows():
df2['is_checked_in'][row['checkin_datetime']:row['checkout_datetime']] = 1
df2['ID'][row['checkin_datetime']:row['checkout_datetime']] = row['ID']
df3 = df2.resample('1H').aggregate({'is_checked_in': sum,'ID':max})