【发布时间】:2019-06-10 20:41:12
【问题描述】:
我有一个如下数据集,其中每个 ID 都可以在任何给定时间和持续时间签入和签出
ID checkin_datetime checkout_datetime
4 04-01-2019 13:07 04-01-2019 13:09
4 04-01-2019 13:09 04-01-2019 13:12
4 04-01-2019 14:06 04-01-2019 14:07
4 04-01-2019 14:55 04-01-2019 15:06
22 04-01-2019 20:23 04-01-2019 21:32
22 04-01-2019 21:38 04-01-2019 21:42
25 04-01-2019 23:22 04-02-2019 00:23
29 04-02-2019 01:00 04-02-2019 06:15
由此计算的签到分钟数需要划分为下表所示的每小时存储桶,以便我可以按小时计算每个 Id 跨小时和天的累计总数,即使签到签出发生在跨小时和天天。
帮助表示赞赏:)
ID checkin_datetime checkout_datetime day HR Minutes
4 04-01-2019 13:07 04-01-2019 13:09 04-01-2019 13 2
4 04-01-2019 13:09 04-01-2019 13:12 04-01-2019 13 3
4 04-01-2019 14:06 04-01-2019 14:07 04-01-2019 14 1
4 04-01-2019 14:55 04-01-2019 15:06 04-01-2019 14 5
4 04-01-2019 14:55 04-01-2019 15:06 04-01-2019 15 6
22 04-01-2019 20:23 04-01-2019 21:32 04-01-2019 20 27
22 04-01-2019 20:23 04-01-2019 21:32 04-01-2019 21 32
22 04-01-2019 21:38 04-01-2019 21:42 04-01-2019 21 4
25 04-01-2019 23:22 04-02-2019 00:23 04-01-2019 23 28
25 04-01-2019 23:22 04-02-2019 00:23 04-02-2019 0 23
29 04-02-2019 01:00 04-02-2019 06:15 04-02-2019 1 60
29 04-02-2019 01:00 04-02-2019 06:15 04-02-2019 2 60
29 04-02-2019 01:00 04-02-2019 06:15 04-02-2019 3 60
29 04-02-2019 01:00 04-02-2019 06:15 04-02-2019 4 60
29 04-02-2019 01:00 04-02-2019 06:15 04-02-2019 5 60
29 04-02-2019 01:00 04-02-2019 06:15 04-02-2019 6 15
创建数据框的代码:
data={'ID':[4,4,4,4,22,22,25,29],
'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 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-02-2019 00:23'
,'04-02-2019 06:15']
}
df = DataFrame(data,columns= ['ID', 'checkin_datetime','checkout_datetime'])
df['checkout_datetime'] = pd.to_datetime(df['checkout_datetime'])
df['checkin_datetime'] = pd.to_datetime(df['checkin_datetime'])
【问题讨论】:
-
如何计算小时和分钟列?
-
@JainilPatel 我已在用于创建数据框的代码中添加
-
@anky_91 时间戳的小时:所以在上面的例子中,22 04-01-2019 20:23 04-01-2019 21:32,小时是 20 小时(晚上 8 点)那个小时是 27 分钟,然后是 21 32 分钟,这就是我需要帮助的时间段
-
@Ani
04-01-2019 20:2327 分钟怎么样?不应该是23吗?你想要结帐和签入之间的区别吗?请解释计算 -
@anky_91 我在粘贴输出时犯了错误,我遗漏了第二行,现在更正了 id 22 04-01-2019 20:23 04-01-2019 21:32 介于 2 之间晚上 8 点到晚上 9 点是第 20 小时的 27 分钟和第 21 小时的 32 分钟(两个小时之间总共有 59 分钟。
标签: python pandas data-structures data-manipulation