resample()
resample()进行重采样。
重采样(Resampling)指的是把时间序列的频度变为另一个频度的过程。把高频度的数据变为低频度叫做降采样(downsampling),把低频度变为高频度叫做增采样(upsampling)。
降采样
考虑因素:
各区间哪边是闭合的(参数:closed)
如何标记各聚合面元,用区间的开头还是末尾(参数:label)
In [232]: ts_index = pd.date_range('2018-08-03',periods =12,freq = 'T') In [233]: ts = pd.Series(np.arange(12),index = ts_index) In [234]: ts Out[234]: 2018-08-03 00:00:00 0 2018-08-03 00:01:00 1 2018-08-03 00:02:00 2 2018-08-03 00:03:00 3 2018-08-03 00:04:00 4 2018-08-03 00:05:00 5 2018-08-03 00:06:00 6 2018-08-03 00:07:00 7 2018-08-03 00:08:00 8 2018-08-03 00:09:00 9 2018-08-03 00:10:00 10 2018-08-03 00:11:00 11 Freq: T, dtype: int32
默认使用左标签(label=‘left'),左闭合(closed='left')
此时第一个区间为:2018-08-03 00:00:00~2018-08-03 00:04:59,故sum为10,label为:2018-08-03 00:00:00
In [235]: ts.resample('5min').sum() Out[235]: 2018-08-03 00:00:00 10 2018-08-03 00:05:00 35 2018-08-03 00:10:00 21 Freq: 5T, dtype: int32
可以指定为右闭合(closed='right'),默认使用左标签(label=‘left')
此时第一个区间为:2018-08-02 23:55:01~2018-08-03 00:00:00,故sum为0,label为:2018-08-02 23:55:00
In [236]: ts.resample('5min',closed='right').sum() Out[236]: 2018-08-02 23:55:00 0 2018-08-03 00:00:00 15 2018-08-03 00:05:00 40 2018-08-03 00:10:00 11 Freq: 5T, dtype: int32
可以指定为右闭合(closed='right'),右标签(label=‘right')
此时第一个区间为:2018-08-02 23:55:01~2018-08-03 00:00:00,故sum为0,label为:2018-08-03 00:00:00
In [237]: ts.resample('5min',closed='right',label='right').sum() Out[237]: 2018-08-03 00:00:00 0 2018-08-03 00:05:00 15 2018-08-03 00:10:00 40 2018-08-03 00:15:00 11 Freq: 5T, dtype: int32
升采样
考虑因素:
没有聚合,但是需要填充
In [244]: frame = pd.DataFrame(np.random.randn(2, 4), ...: index=pd.date_range('1/1/2000', periods=2, ...: freq='W-WED'), # freq='W-WED'表示按周 ...: columns=['Colorado', 'Texas', 'New York', 'Ohio']) In [245]: frame Out[245]: Colorado Texas New York Ohio 2000-01-05 1.201713 0.029819 -1.366082 -1.325252 2000-01-12 -0.711291 -1.070133 1.469272 0.809806
当我们对这个数据进行聚合的的时候,每个组只有一个值,以及gap(间隔)之间的缺失值。在不使用任何聚合函数的情况下,
我们使用asfreq方法将其转换为高频度:
In [246]: df_daily = frame.resample('D').asfreq() In [247]: df_daily Out[247]: Colorado Texas New York Ohio 2000-01-05 1.201713 0.029819 -1.366082 -1.325252 2000-01-06 NaN NaN NaN NaN 2000-01-07 NaN NaN NaN NaN 2000-01-08 NaN NaN NaN NaN 2000-01-09 NaN NaN NaN NaN 2000-01-10 NaN NaN NaN NaN 2000-01-11 NaN NaN NaN NaN 2000-01-12 -0.711291 -1.070133 1.469272 0.809806
使用ffill()进行填充
In [248]: frame.resample('D').ffill() Out[248]: Colorado Texas New York Ohio 2000-01-05 1.201713 0.029819 -1.366082 -1.325252 2000-01-06 1.201713 0.029819 -1.366082 -1.325252 2000-01-07 1.201713 0.029819 -1.366082 -1.325252 2000-01-08 1.201713 0.029819 -1.366082 -1.325252 2000-01-09 1.201713 0.029819 -1.366082 -1.325252 2000-01-10 1.201713 0.029819 -1.366082 -1.325252 2000-01-11 1.201713 0.029819 -1.366082 -1.325252 2000-01-12 -0.711291 -1.070133 1.469272 0.809806 In [249]: frame.resample('D').ffill(limit=2) Out[249]: Colorado Texas New York Ohio 2000-01-05 1.201713 0.029819 -1.366082 -1.325252 2000-01-06 1.201713 0.029819 -1.366082 -1.325252 2000-01-07 1.201713 0.029819 -1.366082 -1.325252 2000-01-08 NaN NaN NaN NaN 2000-01-09 NaN NaN NaN NaN 2000-01-10 NaN NaN NaN NaN 2000-01-11 NaN NaN NaN NaN 2000-01-12 -0.711291 -1.070133 1.469272 0.809806
新的日期索引没必要跟旧的重叠
In [250]: frame.resample('W-THU').ffill() Out[250]: Colorado Texas New York Ohio 2000-01-06 1.201713 0.029819 -1.366082 -1.325252 2000-01-13 -0.711291 -1.070133 1.469272 0.809806
分组重采样
In [279]: times = pd.date_range('2018-08-3 00:00', freq='1min', periods=10) In [280]: df2 = pd.DataFrame({'time': times.repeat(3), ...: 'key': np.tile(['a', 'b', 'c'], 10), ...: 'value': np.arange(30)}) In [281]: df2[:5] Out[281]: key time value 0 a 2018-08-03 00:00:00 0 1 b 2018-08-03 00:00:00 1 2 c 2018-08-03 00:00:00 2 3 a 2018-08-03 00:01:00 3 4 b 2018-08-03 00:01:00 4 In [282]: df2.groupby(['key',pd.Grouper(key='time',freq='5min')]).sum() Out[282]: value key time a 2018-08-03 00:00:00 30 2018-08-03 00:05:00 105 b 2018-08-03 00:00:00 35 2018-08-03 00:05:00 110 c 2018-08-03 00:00:00 40 2018-08-03 00:05:00 115
asfreq()
asfreq()进行频度转换。
> index = pd.date_range('1/1/2000', periods=4, freq='T') > series = pd.Series([0.0, None, 2.0, 3.0], index=index) > df = pd.DataFrame({'s':series}) > df s 2000-01-01 00:00:00 0.0 2000-01-01 00:01:00 NaN 2000-01-01 00:02:00 2.0 2000-01-01 00:03:00 3.0
将频度转换为30s
> df.asfreq(freq='30S') s 2000-01-01 00:00:00 0.0 2000-01-01 00:00:30 NaN 2000-01-01 00:01:00 NaN 2000-01-01 00:01:30 NaN 2000-01-01 00:02:00 2.0 2000-01-01 00:02:30 NaN 2000-01-01 00:03:00 3.0
将频度转换为2min,不会进行重采样(与resample的不同之处)
> df.asfreq(freq='2min') s 2000-01-01 00:00:00 0.0 2000-01-01 00:02:00 2.0
使用bfill()进行填充
> df.asfreq(freq='30S').bfill() s 2000-01-01 00:00:00 0.0 2000-01-01 00:00:30 NaN 2000-01-01 00:01:00 NaN 2000-01-01 00:01:30 2.0 2000-01-01 00:02:00 2.0 2000-01-01 00:02:30 3.0 2000-01-01 00:03:00 3.0
以上这篇Pandas —— resample()重采样和asfreq()频度转换方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- lol全球总决赛lck一号种子是谁 S14全球总决赛lck一号种子队伍
- BradMehldau-ApresFaure(2024)[24-96]FLAC
- IlCannone-FrancescaDegoPlaysPaganinisViolin(2021)[24-96]FLAC
- Tchaikovsky,Babajanian-PianoTrios-Gluzman,Moser,Sudbin[FLAC+CUE]
- 费玉清.1987-费玉清十周年旧曲情怀4CD【东尼】【WAV+CUE】
- 群星.2024-春花焰电视剧影视原声带【TME】【FLAC分轨】
- 方力申.2008-我的最爱新曲+精丫金牌大风】【WAV+CUE】
- 群星 《2024好听新歌35》十倍音质 U盘音乐 [WAV分轨][1.1G]
- 群星《烧透你的耳朵1》DXD金佰利 [低速原抓WAV+CUE][1.2G]
- 莫文蔚《超级金曲精选2CD》SONY [WAV+CUE][1.6G]
- 【RR】加尼克奥尔森GarrickOhlsso《贝多芬钢琴协奏曲全集》原声母带WAV
- 彭芳《纯色角1》[WAV+CUE]
- 李蔓《山顶的月亮—李蔓动态情歌》
- 梁咏琪.1999-新鲜【EEI】【WAV+CUE】
- 张琍敏.1979-悲之秋【海山】【FLAC分轨】