【问题标题】:How do I group max and min timestamp on pandas dataframe如何在熊猫数据框中对最大和最小时间戳进行分组
【发布时间】:2018-04-05 07:04:07
【问题描述】:

我想对数据集进行分组并返回最大和最小时间戳。这是我的数据

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

这是我想要的输出

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

这就是我所做的,代码似乎效率不高,我希望在 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)

熊猫似乎有这种枢轴

【问题讨论】:

    标签: python pandas pivot


    【解决方案1】:

    我认为需要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
    

    或者稍微修改一下你的解决方案(应该会更快):

    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
    

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 2021-09-15
      • 2014-06-27
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      相关资源
      最近更新 更多