我有一個資料框,其中包含客戶進出建筑物的資料,請參見此處的示例:
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']}
有沒有什么好的方法可以計算每個人在大樓里花費的時間?
我遇到的問題是有些人進入建筑物的頻率更高,這使得它更難處理。到目前為止,我根據相應的事件將資料幀分成兩個單獨的“輸入”和“輸出”,洗掉所有重復項(因此完全忽略了多次進入建筑物的人),按客戶對兩個資料幀進行排序并計算時間差在資料幀“輸入”和“輸出”之間。
有更好的方法嗎?我正在考慮遍歷資料框,但我認為如果您有大型資料集,出于時間原因,您應該避免使用它...
謝謝你的想法!
uj5u.com熱心網友回復:
您可以重塑、計算時間增量并將它們相加。
注意。這種方法依賴于這樣一個事實,即客戶對每次訪問都有輸入和輸出值,并且對日期進行排序(如果不添加排序步驟)
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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456665.html
