每周更新一次的熊猫

时间:2019-08-14 08:29:18

标签: python pandas

我有一些设备的每周日志数据。对于某些设备,它从星期一开始,对于某些星期三,等等。有时此数据中有〜month的间隔,但是我希望DataFrame索引仍然包含每周具有NaN值的行。

我正在尝试在Python中使用asfreq('W'),但我无法获得期望的结果。

示例:

我所拥有的:

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中组的第一行),并每周重新采样第一行。

用熊猫asfreq直接可以实现吗?用其他的熊猫方法吗?还是应该使用一些更复杂的自定义功能?

谢谢。

1 个答案:

答案 0 :(得分:1)

您数据中的问题是星期三的第一个值,星期四的后两个,所以asfreq返回NaN,因为尝试将其更改为星期日工作日频率-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