【发布时间】:2022-08-17 21:06:07
【问题描述】:
我有以下代码
from random import randrange, randint
from datetime import timedelta, datetime
def random_date(start, end):
delta = end - start
int_delta = (delta.days * 24 * 60 * 60) + delta.seconds
random_second = randrange(int_delta)
return start + timedelta(seconds=random_second)
from datetime import datetime
d1 = datetime.strptime(\'1/1/2008 1:30 PM\', \'%m/%d/%Y %I:%M %p\')
d2 = datetime.strptime(\'1/1/2009 4:50 AM\', \'%m/%d/%Y %I:%M %p\')
num_rows = 40000
num_users = 10000
events = [\'page_view\', \'session_start\']
random_timestamps = [random_date(d1, d2).timestamp() for i in range(num_rows)]
random_users = [randint(0, num_users) for i in range(num_rows)]
random_events = [events[randint(0, 1)] for i in range(num_rows)]
df = pd.DataFrame({\'event_timestamp\': random_timestamps,
\'user_pseudo_id\': random_users,
\'event_name\': random_events
})
user_ids = df.user_pseudo_id.unique()
df.sort_values([\'event_timestamp\', \'event_name\'], ascending=[True, False], inplace=True)
for user_id in user_ids:
df.loc[df.user_pseudo_id == user_id, \'event_timestamp_diff\'] = df[df.user_pseudo_id == user_id][\'event_timestamp\'].rolling(window=2).apply(np.diff)
df.event_timestamp_diff.fillna(0, inplace=True)
df 是来自 Google Analytics 4 的与特定用户 pseudo_user_id 相关的事件(新会话、网页浏览等)。我想要完成的是仅针对与特定用户相关的事件计算来自先前事件的时间戳差异。本质上,对于此用户,此事件发生在上一个事件之后多长时间。
我之前以非常有限的方式使用了rolling,并希望有另一种选择(例如shift)或分组逻辑来帮助在有大量用户的情况下加快这一速度。
-
你应该提供一个可重现的例子
-
不要使用
loops使用groupby语句 -
@mozway 我添加了一个可重现的示例
标签: python pandas dataframe google-analytics