我有以下数据框,
df.head()
UID Timestamp Weekday Business_hour
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
基于以下条件,
活跃:相同的UID是否有更大的事件。也就是说,当同一个UID在同一天出现的次数超过2次时。
Multiple_days:相同的UID是否在多天(2天以上)内有效。
Busi_weekday:在工作日工作时间内是否会出现相同的UID。
目标输出应该是,
UID Active Multiple_days Busi_weekday
AAD TRUE TRUE TRUE
SAP FALSE TRUE FALSE
YAS FALSE FALSE FALSE
答案 0 :(得分:1)
您可以像这样逐一计算:
data.Timestamp = pd.to_datetime(data.Timestamp)
data['date' ] = [x.date() for x in data.Timestamp]
target_df = pd.DataFrame()
target_df['UID'] = data.UID.unique()
a = data.groupby(['UID', 'date']).size()
a = a[a>1]
target_df['Active'] = [True if x in pd.DataFrame(a).reset_index().UID.values else False for x in target_df.UID.values]
a = data.groupby('UID')['Timestamp'].nunique()
a = a[a>1]
target_df['Multiple_days'] = [True if x in pd.DataFrame(a).reset_index().UID.values else False for x in target_df.UID.values]
a = data[(data.Weekday==True)&(data.Business_hour==True)].UID.unique()
target_df['Busi_weekday'] = [True if x in a else False for x in target_df.UID.values]
target_df