根据给定数据帧的列条件创建新数据框

时间:2018-01-22 19:05:01

标签: python pandas numpy group-by

我有以下数据框,

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

1 个答案:

答案 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

enter image description here