首页 > 解决方案 > 按时间间隔+聚合函数对熊猫进行分组

问题描述

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

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 秒间隔。

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

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

我怎么能得到那个?

标签: pythonpython-3.xpandasdataframedatetime

解决方案


假设你的意思是5 seconds,我们可以使用pd.Grouperwithaggmin, 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


推荐阅读