多数“ Pythonic”(或“ Pandathonic”)方式遍历DataFrame并创建分组

时间:2020-05-06 17:54:24

标签: python pandas

我目前正在重构一些旧代码。代码的一部分通过一个很大的网页活动数据框进行迭代,该数据框通常如下所示:

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

此代码完成的功能:遍历用户执行的所有动作并将其标记为会话(定义为同一用户的所有动作,并且它们之间没有60分钟以上的间隔)。例如,如果用户ABC单击11:01、11:52和12:43的链接,这些链接都将属于同一会话,并应标记为“ ABC 11:01”。我不清楚如何在不遍历每一行的情况下重新创建此链接名称效果

主要问题是,这花费了将近10分钟,并且有多个类似的代码块。我读了一些书后发现,遍历熊猫数据框的行是执行此类操作的最慢方法。我解决此问题的第一个想法是创建两个临时列,其中“用户”和“时间”下移一个以方便比较。任何和所有帮助表示感谢,谢谢!

0 个答案:

没有答案
相关问题