Python 最";蟒蛇的;(或“Pandathonic”)遍历数据帧并创建分组的方法

Python 最";蟒蛇的;(或“Pandathonic”)遍历数据帧并创建分组的方法,python,pandas,Python,Pandas,我目前正在重构一些旧代码。代码的一部分遍历网页活动的一个非常大的排序数据框,通常如下所示: Index | User | Time | Session_name | Session_num 1, ABC, 11:52, "", "" 2, ABC, 12:31, "", "" 3, DEF, 7:30, "", ""

我目前正在重构一些旧代码。代码的一部分遍历网页活动的一个非常大的排序数据框,通常如下所示:

Index | User | Time   |   Session_name  |  Session_num
1,       ABC,   11:52,        "",            ""  
2,       ABC,   12:31,        "",            ""    
3,       DEF,   7:30,         "",            ""  
4,       DEF,   12:30,        "",            ""  
....
当前代码如下所示:

x = 60 # number of minutes between two interactions that are considered same session
session_ID = df['User'][0] + df['Time'][0]
session_num = 1
for i in df.index[1:]:
     if(df['User'][i-1] == df['User'][i]) & ((df['Time'][i] -df['Time'][i-1]) < x):
        df.loc[i, 'session_name'] = session_ID
        df.loc[i, 'session_number'] = session_num
     else:
         session_ID = CombinedGALogDF['User_ID'][i] + "," + CombinedGALogDF['Timestamp'][i]
        session_num += 1
        df.loc[i, 'session_name'] = session_ID
        df.loc[i, 'session_number'] = session_num
x=60#被视为同一会话的两次交互之间的分钟数
会话ID=df['User'][0]+df['Time'][0]
会话数=1
对于df.index[1:]中的i:
如果(df['User'][i-1]==df['User'][i])和(df['Time'][i]-df['Time'][i-1])
此代码完成的内容:遍历用户执行的所有操作,并将其标记到会话中(会话定义为同一用户执行的所有操作之间没有60分钟的间隔)。例如,如果用户ABC在11:01、11:52和12:43单击链接,则这些链接都将是同一会话的一部分,并应标记为“ABC 11:01”。我不清楚如何在不遍历每一行的情况下重新创建这种链式名称效果


主要的问题是,这几乎需要10分钟,并且有多个类似的代码块。我读了一些书,发现遍历panda数据帧的行是执行这种操作最慢的方法。我解决这个问题的第一个想法是创建两个临时列,其中一个是用户列,另一个是时间向下移动的列,以便于比较。非常感谢您的帮助,谢谢

你想完成什么?你想按组进行聚合吗
df.groupby(['User'])。
好问题,我应该说得更清楚。我试图遍历每个事件并将其标记到一个用户会话,我将该会话定义为数据库中具有相同用户且时间戳间隔小于60分钟的所有活动。输出将是每个事件(时间戳事件)被标记为会话ID(会话启动时的用户+时间戳)和会话num,会话num只是一个迭代计数。这里最困难的是,如果你在11:01、11:52和12:43点击一个链接,那么会话就可以链接起来。这些都是同一个“会话”的一部分,应该命名为“ABC 11:01”。你想完成什么?你想按组聚合吗
df.groupby(['User'])。
好问题,我应该说得更清楚。我试图遍历每个事件并将其标记到一个用户会话,我将该会话定义为数据库中具有相同用户且时间戳间隔小于60分钟的所有活动。输出将是每个事件(时间戳事件)被标记为会话ID(会话启动时的用户+时间戳)和会话num,会话num只是一个迭代计数。这里最困难的是,如果你在11:01、11:52和12:43点击一个链接,这些会话就可以被链接起来,它们都是同一个“会话”的一部分,应该被命名为“ABC 11:01”