对pandas之resample函数中的label参数和closed参数的理解

本文详细解释了pandas库中resample函数的closed和label参数。closed参数决定了时间序列分割区间的开闭方向,而label参数则影响了标签的取值方向。默认情况下,两者都为'left',但可以分别设置为'right',改变区间和标签的行为。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

一、创建数据源

resample 函数的作用,是将时间序列,按一定频率进行分割

DataFrame.resample(rule, how=None, axis=0, fill_method=None, 
                   closed=None, label=None, 
                   convention='start', kind=None, loffset=None, limit=None, 
                   base=0, on=None, level=None)

二、对参数 closed 和 label 的解释
rng = pd.date_range('20180103', periods=12)
ts = pd.Series(np.arange(1,13), index=rng)
ts
# 2018-01-03     1
# 2018-01-04     2
# 2018-01-05     3
# 2018-01-06     4
# 2018-01-07     5
# 2018-01-08     6
# 2018-01-09     7
# 2018-01-10     8
# 2018-01-11     9
# 2018-01-12    10
# 2018-01-13    11
# 2018-01-14    12
1、closed 参数:决定分割区间的开闭方向

默认参数:label=left,closed=left

ts.resample("5D").sum()
# 2018-01-03    15
# 2018-01-08    40
# 2018-01-13    23
# Freq: 5D, dtype: int32

""" 解释:closed 参数默认值为 left,左闭右开 """
ts的时间段为:2018-01-032018-01-14,以 5天为频率进行分割
[3, 8)        求和:1+2+3+4+5 = 15
[8, 13)       求和:6+7+8+9+10 = 40
[13, 18)      求和:11+12 = 23

label=left,closed=right

ts.resample("5D", closed="right").sum()
# 2017-12-29     1
# 2018-01-03    20
# 2018-01-08    45
# 2018-01-13    12
# Freq: 5D, dtype: int32

""" 解释:closed="right"时,为 “左开右闭” """
ts的时间段为:2018-01-032018-01-14,以 5天为频率进行分割
(3, 8]        求和:2+3+4+5+6 = 20
(8, 13]       求和:7+8+9+10+11 = 45
(13, 18]      求和:12 = 12

由于 时间序列的第一个数据:2018-01-03 不在分割区间内,
所以会提前几天,则分割区间的第一个为:
(29, 3]2017-12-29 ~ 2018-01-03   求和:1

2、label 参数:决定标签的取值方向

默认参数:label=left,closed=left

ts.resample("5D").sum()
# 2018-01-03    15
# 2018-01-08    40
# 2018-01-13    23
# Freq: 5D, dtype: int32

""" 解释:label 参数默认值为 left,取分割区间左边的值作为标签 """
ts的时间段为:2018-01-032018-01-14,以 5天为频率进行分割
[3, 8)        标签:2018-01-03 
[8, 13)       标签:2018-01-08 
[13, 18)      标签:2018-01-13 

label=right,closed=left

ts.resample("5D", label="right").sum()
# 2017-12-29     1
# 2018-01-03    20
# 2018-01-08    45
# 2018-01-13    12
# Freq: 5D, dtype: int32

""" 解释:label="right"时,为 “左开右闭” """
ts的时间段为:2018-01-032018-01-14,以 5天为频率进行分割
(3, 8]        标签:2018-01-03
(8, 13]       标签:2018-01-08
(13, 18]      标签:2018-01-13

由于 时间序列的第一个数据:2018-01-03 不在分割区间内,
所以会提前几天,则分割区间的第一个为:
(29, 3]2017-12-29 ~ 2018-01-03   标签:2017-12-29

两个参数均为 right时,即 label=right,closed=right

ts.resample("5D", label="right", closed="right").sum()
# 2018-01-03     1
# 2018-01-08    20
# 2018-01-13    45
# 2018-01-18    12
# Freq: 5D, dtype: int32
分割区间    标签           求和
(29, 3]     2018-01-03     1
(3, 8]      2018-01-08     20
(8, 13]     2018-01-13     45
(13, 18]    2018-01-18     12

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值