假设我有一只这样的熊猫:
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秒间隔。
第二列是所有分组行的最大值。
第三列是所有分组行的第一列。
我该怎么办?
答案 0 :(得分:3)
假设您的意思是5 seconds
,我们可以将pd.Grouper
与agg
和min, 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