【发布时间】:2018-07-03 09:57:04
【问题描述】:
我有以下信息的在线用户数据,
df.head()
USER Timestamp day_of_week Busi_days Busi_hours
AAD 2017-07-11 09:31:44 TRUE TRUE
AAD 2017-07-11 23:24:43 TRUE FALSE
AAD 2017-07-12 13:24:43 TRUE TRUE
SAP 2017-07-23 14:24:34 FALSE FALSE
SAP 2017-07-24 16:58:49 TRUE TRUE
YAS 2017-07-31 21:10:35 TRUE FALSE
我想计算 USER 列的活动并创建三个新列,即: 1. Activity:使用基于用户活跃程度的信息,这意味着如果同一用户点击两次以上,则将其称为 TRUE 否则错误的。 2.Multiple_days: 如果用户点击网站超过一天,如果同一用户点击超过 2 天,则调用该列 TRUE 否则 FALSE。 3.Busniess_days:用户是否在工作日点击,如果用户在营业日内的营业时间内点击该网站,则称其为True,否则为FALSE
我有以下脚本执行上述任务,但对于我的庞大数据框my data frame is 117Mb in size. 来说它真的很慢@任何更好的解决方案都会很棒
我的尝试:
df.Timestamp = pd.to_datetime(df.Timestamp)
df['date'] = [x.date() for x in df.Timestamp]
target_df = pd.DataFrame()
target_df['USER'] = df.USER.unique()
a = df.groupby(['USER', 'date']).size()
a = a[a>1]
UID=pd.DataFrame(a).reset_index().USER.values
target_df['Active'] = [True if x in UID else False for x in target_df.USER.values]
a = df.groupby('USER')['Timestamp'].nunique()
a = a[a>1]
UUID2=pd.DataFrame(a).reset_index().USER.values
target_df['Multiple_days'] = [True if x in UUID2 else False for x in target_df.USER.values]
a = df[(df.Busi_days==True)&(df.Busi_hours==True)].USER.unique()
target_df['Busi_weekday'] = [True if x in a else False for x in target_df.USER.values]
target_df.head()
USER Active Multiple_days Busi_weekday
AAD TRUE TRUE TRUE
SAP FALSE TRUE FALSE
YAS FALSE FALSE FALSE
【问题讨论】:
-
TA_log是什么? -
对不起它的 df,我编辑了错字 TA_log 是我在真实脚本上用于我的真实数据框的名称。它的df在这里的问题
-
在
a = df[(df.Busi_days==True)&(df.Busi_hours==True)].uuid.unique()中也是错字。 -
是的,也感谢您的通知。我刚刚在我的问题中编辑了它
-
@user1017373,你能指出哪位是瓶颈吗?有几种方法可以找到它:在脚本运行时打印时间戳,或者通过分析器运行。虽然我们可以做出很好的猜测,但拥有这些数据可能会产生更好的答案。
标签: python pandas numpy data-science pandas-groupby