按时间间隔+聚合函数对熊猫进行分组

时间:2019-10-02 23:32:39

标签: python python-3.x pandas dataframe datetime

假设我有一只这样的熊猫:

2010-01-01 04:10:00:025     69
2010-01-01 04:10:01:669     1
2010-01-01 04:10:03:027     3
2010-01-01 04:10:04:003     8
2010-01-01 04:10:05:987     10
2010-01-01 04:10:06:330     99
2010-01-01 04:10:08:369     55
2010-01-01 04:10:09:987     5000
2010-01-01 04:10:11:148     13

我需要将其转换为以下格式:

2010-01-01 04:10:00:000     69      69
2010-01-01 04:10:05:000     5000    10
2010-01-01 04:10:10:000     13      13

第一列对应于从2010-01-01 04:10:00:000开始的每5秒间隔。

第二列是所有分组行的最大值。

第三列是所有分组行的第一列。

我该怎么办?

2 个答案:

答案 0 :(得分:3)

假设您的意思是5 seconds,我们可以将pd.Grouperaggmin, first结合使用:

# use this line if your first column is not datetime type yet.
# df['col1'] = pd.to_datetime(df['col1'], format='%Y-%m-%d %H:%M:%S:%f')

df.groupby(pd.Grouper(key='col1', freq='5s'))['col2'].agg(['max', 'first']).reset_index()

输出

                 col1   max  first
0 2010-01-01 04:10:00    69     69
1 2010-01-01 04:10:05  5000     10
2 2010-01-01 04:10:10    13     13

注意:由于您未提供列名,因此我将其称为col1, col2

答案 1 :(得分:1)

我假设您的第一列是日期时间,名称为date_time,第二列是'value'。为了达到您的目标,您可以使用“ resample

   df.set_index('date_time').resample("5s").agg(['max','min'])

*请注意我用了5秒,因为您的数据没有显示5分钟

结果

                             value
                             max     min
      date_time     
      2010-01-01 04:10:00    69      1
      2010-01-01 04:10:05    5000    10
      2010-01-01 04:10:10    13      13