首页 > 解决方案 > 每周频率的 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吗?用其他一些熊猫方法?还是应该是一些更复杂的自定义函数?

谢谢。

标签: pythonpandas

解决方案


问题在于您的数据是星期三的第一个值,星期四的最后一个值,所以 asfreq 返回NaNs,因为尝试将其更改为 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

推荐阅读