user user_id age swiped_in swiped_out
0 Bob 1 53 2019-02-25 09:50:32 2018-02-25 10:50:32
1 Jane 2 34 2019-02-25 09:50:32 2019-02-25 11:50:32
2 Alice 3 35 2019-02-25 09:50:32 2019-02-25 12:50:32
3 Bob 1 54 2019-02-25 10:50:32 2019-02-25 11:30:32
4 Bob 1 55 2019-02-25 11:31:32 2019-02-25 12:51:32
5 Jane 2 34 2019-02-25 09:50:32 2019-02-25 11:50:32
这是我的代码。
c = ['swiped_in','swiped_out']
df[c] = df[c].apply(pd.to_datetime)
df = df.sort_values(c)
df=df.groupby(['user','user_id']).agg({'swiped_in':'min','swiped_out':'max','age':'first'})
现在我可以得到以下输出。
swiped_in swiped_out age
user user_id
Alice 3 2019-02-25 09:50:32 2019-02-25 12:50:32 35
Bob 1 2019-02-25 09:50:32 2019-02-25 12:51:32 53
Jane 2 2019-02-25 09:50:32 2019-02-25 11:50:32 34
我需要的是..
swiped_in swiped_out age
user user_id
Alice 3 2019-02-25 09:50:32 2019-02-25 12:50:32 35
Bob 1 2019-02-25 09:50:32 2019-02-25 12:51:32 ..
Jane 2 2019-02-25 09:50:32 2019-02-25 11:50:32 34
如果年龄相同,那么我可以按原样填写数据。如果不是唯一的,我需要输入自定义的值。
答案 0 :(得分:0)
在groupby部分中尝试以下操作:
custom_value=5 #change this
df_new=(df.groupby(['user','user_id'])
.agg({'swiped_in':'min','swiped_out':'max','age':
lambda x:np.where(x.nunique()==1,next(iter(set(x))),custom_value)}))
print(df_new)
swiped_in swiped_out age
user user_id
Alice 3 2019-02-25 09:50:32 2019-02-25 12:50:32 35
Bob 1 2019-02-25 09:50:32 2019-02-25 12:51:32 5
Jane 2 2019-02-25 09:50:32 2019-02-25 11:50:32 34