我有以下信息的在线用户数据
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或false。2.Multiple_days:
如果用户点击网站超过一天,如果同一个用户点击超过2天,请调用TRUE else FALSE列。三。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
您可以使用:
编辑:
具有自定义功能的解决方案:
相关问题 更多 >
编程相关推荐