我有一个数据框,其中包含客户进出建筑物的数据,请参见此处的示例:
import pandas as pd
from datetime import datetime, timedelta
data = {'customer': ['nameA', 'nameA', 'nameB', 'nameC', 'nameB', 'nameB', 'nameD', 'nameC', 'nameD', 'nameB'],
'event': ['in', 'out', 'in', 'in', 'out', 'in', 'in', 'out', 'out', 'out',],
'time_stamp': ['2020-04-20 09:58:47', '2020-04-20 19:58:52', '2020-04-20 09:28:52',
'2020-04-20 10:18:52', '2020-04-20 09:58:52', '2020-04-20 11:08:52',
'2020-04-20 13:58:52', '2020-04-20 14:58:52', '2020-04-20 15:58:52',
'2020-04-20 19:58:52']}
有没有什么好的方法可以计算每个人在大楼里花费的时间?
我遇到的问题是有些人进入建筑物的频率更高,这使得它更难处理。到目前为止,我根据相应的事件将数据框分为两个单独的“输入”和“输出”,删除所有重复项(因此多次进入建筑物的人被完全忽略),按客户对两个数据框进行排序并计算时间差在数据帧“输入”和“输出”之间。
有更好的方法吗?我正在考虑遍历数据框,但我认为如果您有大型数据集,出于时间原因,您应该避免使用它...
谢谢你的想法!
您可以重塑、计算时间增量并将它们相加。
注意。这种方法依赖于这样一个事实,即客户对每次访问都有输入和输出值,并且对日期进行排序(如果不添加排序步骤)
df = pd.DataFrame(data)
df['time_stamp'] = pd.to_datetime(df['time_stamp'])
(df
# identify the occurrence of in/out
.assign(group=df.groupby(['customer', 'event']).cumcount())
# reshape to have in/out columns
.pivot(index=['customer', 'group'], columns='event', values='time_stamp')
# compute the duration
.assign(duration=lambda d: d['out']-d['in'])
# sum the durations per customer
.groupby('customer')['duration'].sum()
)
输出:
customer
nameA 0 days 10:00:05
nameB 0 days 09:20:00
nameC 0 days 04:40:00
nameD 0 days 02:00:00
Name: duration, dtype: timedelta64[ns]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句