我每周有一些设备的日志数据。对于某些设备,它从星期一开始,对于某些设备,它在星期三开始,等等。有时此数据中有〜月的间隔,但是我希望DataFrame索引仍然包含每周具有NaN值的行。
我正在尝试asfreq('W')在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
我期望/想要的(请注意带有NaN的2个新行):
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在很多时间序列的情况下,是大熊猫组中第一行的日期),并每周从该第一行重新采样。
NaN
groupby
用熊猫直接可以实现asfreq吗?用其他的熊猫方法吗?还是应该使用一些更复杂的自定义功能?
asfreq
谢谢。
问题在于您的数据是星期三的第一个值,星期四的最后两个,所以asfreq返回NaNs,因为尝试将其更改为Sunday weekday freq- docs:
W-SUN每周频率(星期日)。与 “ W”* 相同 *
一种可能的解决方案,但DatetimeIndex周日更改:
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