python - 每周频率的 Pandas asfreq
问题描述
我有一些设备的每周日志数据。对于某些设备,它从星期一开始,对于一些设备在星期三等。有时这个数据中有 ~month 的间隙,但我希望 DataFrame 索引仍然包含每周具有 NaN 值的行。
我正在尝试asfreq('W')
在 Python 中使用,但我无法得到我期望的结果。
例子:
我有的:
Date Some_Value
==== ==========
2019-04-10 2
2019-04-17 1
2019-04-24 3
2019-05-01 1
2019-05-08 3
2019-05-15 2
2019-06-06 3
2019-06-13 2
我期望/想要拥有的(注意 2 个带有 NaN 的新行):
Date Some_Value
==== ==========
2019-04-10 2
2019-04-17 1
2019-04-24 3
2019-05-01 1
2019-05-08 3
2019-05-15 2
2019-05-22 NaN
2019-05-30 NaN
2019-06-06 3
2019-06-13 2
我得到了什么asfreq('W')
:
Date Some_Value
==== ==========
2019-03-31 NaN
2019-04-07 NaN
2019-04-14 NaN
...................
因此,我从每个星期日获取所有NaN
值和日期。但我不需要每个星期天的日期。我需要获取 DataFrame 的第一个日期(在groupby
许多时间序列的情况下,在 pandas 的组中的第一行)并每周从第一行重新采样。
可以直接用 pandas 实现asfreq
吗?用其他一些熊猫方法?还是应该是一些更复杂的自定义函数?
谢谢。
解决方案
问题在于您的数据是星期三的第一个值,星期四的最后一个值,所以 asfreq 返回NaN
s,因为尝试将其更改为 Sunday weekday freq - docs:
W-SUN 每周频率(星期日)。与“W”相同
一种可能的解决方案,但DatetimeIndex
在周日进行了更改:
print (df.resample('W').first())
Some_Value
Date
2019-04-14 2.0
2019-04-21 1.0
2019-04-28 3.0
2019-05-05 1.0
2019-05-12 3.0
2019-05-19 2.0
2019-05-26 NaN
2019-06-02 NaN
2019-06-09 3.0
2019-06-16 2.0
如果改变频率asfreq
:
print (df.asfreq('W-Wed'))
Some_Value
Date
2019-04-10 2.0
2019-04-17 1.0
2019-04-24 3.0
2019-05-01 1.0
2019-05-08 3.0
2019-05-15 2.0
2019-05-22 NaN
2019-05-29 NaN
2019-06-05 NaN
2019-06-12 NaN
print (df.asfreq('W-Thu'))
Some_Value
Date
2019-04-11 NaN
2019-04-18 NaN
2019-04-25 NaN
2019-05-02 NaN
2019-05-09 NaN
2019-05-16 NaN
2019-05-23 NaN
2019-05-30 NaN
2019-06-06 3.0
2019-06-13 2.0
推荐阅读
- android - 改造中的呼叫或响应?
- stored-procedures - Informix SQL 11.5 — 在 while 循环中访问变量
- java - 雪兰多自愈障碍
- excel - 彭博停止 VBA Application.Ontime
- sqlalchemy - 如何在 SQLAlchemy 中的两个表之间建立两个相似的关系?
- angular - 使用 ngInx 在 EC2 托管的 AWS Mean Stack 中设置 SSL(https)
- javascript - 如何使用 JQuery 和 Flask 将 img 发送到服务器
- python - Python statsmodelsseasonal_decompose() 趋势是原始数据的镜像
- windows-installer - 查找 vcredist_x86.exe 的合并模块
- amazon-web-services - Terraform:lambda_function_association cloudfront 分布 s3 origin m