Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法。重新取样时间序列数据。
方便的时间序列的频率转换和重采样方法。对象必须具有类似datetime的索引(DatetimeIndex、PeriodIndex或TimedeltaIndex),或将类似datetime的值传递给on或level关键字。
有关resample()的用法可参考:
# coding=utf-8
import time
from pprint import pprint
import pandas as pd
import time
data_list = [
{'name': "测试1", '__time__': '1663744601'},
{'name': "测试2", '__time__': '1663746401'},
{'name': "测试3", '__time__': '1663746881'},
{'name': "测试4", '__time__': '1663754081'},
{'name': "测试5", '__time__': '1663754321'},
{'name': "测试6", '__time__': '1663755821'},
{'name': "测试7", '__time__': '1663757621'},
{'name': "测试8", '__time__': '1663761341'},
{'name': "测试9", '__time__': '1663763561'},
{'name': "测试10", '__time__': '1663772081'},
{'name': "测试11", '__time__': '1663773161'},
{'name': "测试12", '__time__': '1663775981'},
]
df = pd.DataFrame(data_list)
# pandas将时间戳字符串转换为格式化时间类型
df['__time__'] = pd.to_datetime(df['__time__'].apply(lambda x: time.strftime('%Y-%m-%d %H:%M', time.localtime(int(x)))))
# 按照__time__的降序对dataframe进行排序
df = df.sort_values(by='__time__')
# 给df加一列,值都为1
df['temp_num'] = 1
# 时间重新采样,并进行统计,重新设置索引,并只取,'__time__', 'temp_num',这两列
# 注意,rule='2H'是间隔两小时
df = df.resample(rule='2H', on='__time__').sum().reset_index()[['__time__', 'temp_num']]
df['__time__'] = df['__time__'].apply(lambda x: str(x)) # 将时间格式 转化成时间格式字符串
dic_data = df.to_dict(orient='records')
pprint(dic_data)