gpt4 book ai didi

python - 根据前一行的输出赋值

转载 作者:太空宇宙 更新时间:2023-11-04 00:03:12 24 4
gpt4 key购买 nike

我正在使用 pandas 分析应用程序的输出日志,并希望将每个条目分配到一个 session 中。 session 定义为从开始算起的 60 分钟时间段。

这是一个小例子:

import numpy as np
import pandas as pd
from datetime import timedelta

> df = pd.DataFrame({
'time': [
pd.Timestamp(2019, 1, 1, 1, 10),
pd.Timestamp(2019, 1, 1, 1, 15),
pd.Timestamp(2019, 1, 1, 1, 20),
pd.Timestamp(2019, 1, 1, 2, 20),
pd.Timestamp(2019, 1, 1, 5, 0),
pd.Timestamp(2019, 1, 1, 5, 15)
]
})

> df
time
0 2019-01-01 01:10:00
1 2019-01-01 01:15:00
2 2019-01-01 01:20:00
3 2019-01-01 02:20:00
4 2019-01-01 05:00:00
5 2019-01-01 05:15:00

对于第一行,start_time 等于time。对于后续行,如果其 time 与前一行相差 1 小时以内,则认为它处于同一 session 中。如果没有,它将以 start_time = time 开始一个新 session 。我正在使用一个循环:

df['start_time'] = np.nan

for index in df.index:
if index == 0:
start_time = df['time'][index]
else:
delta = df['time'][index] - df['time'][index - 1]
start_time = df['start_time'][index - 1] if delta.total_seconds() <= 3600 else df['time'][index]

df['start_time'][index] = start_time

输出:

                   time          start_time
0 2019-01-01 01:10:00 2019-01-01 01:10:00
1 2019-01-01 01:15:00 2019-01-01 01:10:00
2 2019-01-01 01:20:00 2019-01-01 01:10:00
3 2019-01-01 02:20:00 2019-01-01 01:10:00
4 2019-01-01 05:00:00 2019-01-01 05:00:00 # new session
5 2019-01-01 05:15:00 2019-01-01 05:00:00

它工作但很慢。有没有办法对其进行矢量化?

最佳答案

使用 diffcumsum 创建组键,然后我们只使用该键获取每个组的 first

s=(df.time.diff()/np.timedelta64(1, 's')).gt(3600).cumsum()
df.groupby(s)['time'].transform('first')
Out[833]:
0 2019-01-01 01:10:00
1 2019-01-01 01:10:00
2 2019-01-01 01:10:00
3 2019-01-01 01:10:00
4 2019-01-01 05:00:00
5 2019-01-01 05:00:00
Name: time, dtype: datetime64[ns]
df['statr_time']=df.groupby(s)['time'].transform('first')

关于python - 根据前一行的输出赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55054851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com