我有一些设备的每周日志数据。对于某些设备,它从星期一开始,对于某些星期三,等等。有时此数据中有〜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
直接可以实现吗?用其他的熊猫方法吗?还是应该使用一些更复杂的自定义功能?
谢谢。
答案 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