Pandas Resample 重采样

# -*- coding:utf-8 -*-
import pandas as pd
import numpy as np

### Resample
# resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换


index = pd.date_range('1/1/2000', periods=9, freq='T')
series = pd.Series(range(9), index=index)
print(series)

# 1. 降低采样频率为3分钟
# T 是分钟 , 3T 是3分钟. 9组数据,分为3份
print(series.resample('3T').sum())

# 2. 降低采样频率为3分钟,但是每个标签使right来代替left
print(series.resample('3T', label='right').sum())

# 3. 降低采样频率为3分钟,但是关闭right区间.
# 备注: 方向从右到左,能取到 头
print(series.resample('3T', label='right', closed='right').sum())

# 4. 增加采样频率到30秒,
# 备注: asfreq方法将其转换为高频度
print(series.resample('30S').asfreq()[0:5])

# 5. 增加采样频率到30秒,使用pad方法填充nan值
# 备注:pad() 填充空值 , pad方法:向下取整
print(series.resample('30S').pad()[0:5])

# 6. 增加采样频率到30秒,使用bfill方法填充nan值
# 备注: bfill() 填充空值,向上取整
print(series.resample('30S').bfill()[:5])


# 7.apply 自定义一个函数
#
def customer_resampler(array_like):
    return np.sum(array_like) + 5


print(series.resample('3T').apply(customer_resampler))

#
#
##### pandas-resample按时间聚合实例
df = pd.read_csv('./mt.csv', index_col="date", parse_dates=["date"])
df.drop(labels="Unnamed: 0", axis=1, inplace=True)  # 删除 名称为 Unnamed: 0 这列

# 1. 按年来提取数据
print(df['2018'])
print(df['2018':'2021'])

# 2. 按月来提取数据
print(df['2018-01':'2018-05'])
print(df['2018-05-23':'2018-09-30'])

# 3. 数据将以
# W 星期
# M 月
# Q 季度
# QS 季度的开始第一天
# A 年
# 10A 10年
# 10AS 十年聚合日期的第一天开始

print(df.resample('W').sum())  # rows 1028
print(df.resample('M').sum())  # rows 238
print(df.resample('Q').sum())  # rows 80
print(df.resample('QS').sum())  # rows 80
print(df.resample('A').sum())  # rows 21

# 具体 某列的数据聚合
# 备注: fillna(0) 填充nan值
print(df.open.resample('A').sum().fillna(0))
# 某两列,重新取样
print(df[['open', 'close']].resample('A').sum().fillna(0))
# 某个时间段内,以W聚合
print(df['2018-05':'2018-09'].resample('W').sum().fillna(0))
#
#
#
times = pd.date_range('20180101', periods=30)
ts = pd.Series(np.arange(1, 31), index=times)
print(ts)

ts_7d = ts.resample('7D').sum()
print(ts_7d)

# 关闭右区间, 左开. 左开右闭
# [1,8),[8,15),[15,22),[22-29),[29-5(下个月))  , label 为 left,标识从区间第一条数据开始
ts_7d = ts.resample('7D', closed='right', label='left').sum()
# (25,1],(1,8],(8,15],(15,22],(22,29],(29,5] ,
ts_7d = ts.resample('7D', closed='right', label='right').sum()
print(ts_7d)

ts_7h_asfreq = ts.resample('7H').asfreq()[-4:]
print(ts_7h_asfreq)

ts_7h_asfreq = ts.resample('7H').asfreq().ffill()[-4:]
print(ts_7h_asfreq)
ts_7h_asfreq = ts.resample('7H').bfill()[-4:]
print(ts_7h_asfreq)

posted @   染指未来  阅读(175)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示