同样也是上一篇练习遇到的函数,感觉有点儿复杂,这里学习下。
pandas.DataFrame.resample
DataFrame.resample(self, rule, axis=0, closed: Union[str, NoneType] = None, label: Union[str, NoneType] = None, convention: str = 'start', kind: Union[str, NoneType] = None, loffset=None, base: int = 0, on=None, level=None)
Resample time-series data
Convenience method for frequency conversion and resampling of time series. Object must have a datetime-like index (DatetimeIndex, PeriodIndex, or TimedeltaIndex), or pass datetime-like values to the on or level keyword.
这个函数是针对时间序列,对DataFrame进行重构
关于date_range
可以参考上一篇:pandas - date_range
我们先创建个数据
index = pd.date_range(start='4/1/2020' , periods=10)
columns = ['a','b','c']
data=np.random.randint(low=1,high=100,size=(10,3))
df = pd.DataFrame(data=data , index=index , columns=columns)
这里,主要是需要指定一个重构的规则
小栗子
df.resample('2D').sum()
resample就是根据2D,2D表示就是2天,也就是根据2天重新构建DataFrame
我们这里就调用sum函数,将符合这个规则的元素求和
我们来观察index,原来是1-10,现在变成1,3,5,7,9,也就是间隔2天一组
label参数
指定,我们使用哪一个作为新的label
df.resample('2D' , label='right').sum()
df.resample('2D' , label='left').sum()
closed参数
这个稍微有点儿奇怪
label的话,是说,我们重组了数据之后,会有多行记录进行合并,那应该取哪一行的label来显示呢?label就是用来指定这个的;
但是closed参数呢?
Which side of bin interval is closed. The default is ‘left’ for all frequency offsets except for ‘M’, ‘A’, ‘Q’, ‘BM’, ‘BA’, ‘BQ’, and ‘W’ which all have a default of ‘right’.
我们再来看一下原始数据:
我们来试试closed参数
默认是closed='left'
这里理解起来还是可以的,2天为一个间隔,label也默认是left
然后,我们来看看closed='right'
df.resample('2D' , closed='right').sum()
这里,我就有点儿疑惑了,数据的重组是我在Excel中用颜色标出来的,这个我可以理解,但是这个label,为什么往前多取了一个
df.resample('2D' , closed='right' , label='right').sum()
有点儿奇怪,我得捋一捋