How do I group max and min timestamp on pandas dataframe

浪子不回头ぞ 提交于 2021-02-05 06:42:04

问题


I want to group a dataset and return the maximum and minimum timestamp. Here's my data

id  timestamp
1   2017-09-17 10:09:01
2   2017-10-02 01:13:15
1   2017-09-17 10:53:07
1   2017-09-17 10:52:18
2   2017-09-12 21:59:40

Here's the output that i want

id    max                   min
1     2017-09-17 10:53:07   2017-09-17 10:09:01
2     2017-10-02 01:13:15   2017-09-12 21:59:40

Here's what I did, the code seems not efficient, I hope theres better way to do this on pandas

data1 = df.sort_values('timestamp').drop_duplicates(['customer_id'], keep='last')
data2 = df.sort_values('timestamp').drop_duplicates(['customer_id'], keep='first')
data1['max'] = data1['timestamp']
data2['min'] = data2['timestamp']
data = data1.merge(data2, on = 'customer_id', how='left')
data = data.drop(['timestamp_x','timestamp_y'], axis=1)

It seems that pandas have this type of pivot


回答1:


I think need agg:

df = df.groupby('id')['timestamp'].agg(['min','max']).reset_index()
print (df)
   id                 min                 max
0   1 2017-09-17 10:09:01 2017-09-17 10:53:07
1   2 2017-09-12 21:59:40 2017-10-02 01:13:15

Or a bit modify your solution (should be faster):

data = df.sort_values('timestamp')
data1 = data.drop_duplicates(['id'], keep='last').set_index('id')
data2 = data.drop_duplicates(['id'], keep='first').set_index('id')

df = pd.concat([data1['timestamp'], data2['timestamp']],keys=('max','min'), axis=1)

print (df)
                   max                 min
id                                        
1  2017-09-17 10:53:07 2017-09-17 10:09:01
2  2017-10-02 01:13:15 2017-09-12 21:59:40


来源:https://stackoverflow.com/questions/49666085/how-do-i-group-max-and-min-timestamp-on-pandas-dataframe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!