Python / Pandas-使用每周列准备时间序列的源数据

时间:2019-06-15 21:13:14

标签: python-3.x pandas time-series

我试图用谷歌搜索这样的问题:如何转换每周数据以在熊猫中进行时间序列分析?

如果没有直接谈论从每天到每周的数据重新采样或类似的事情的结果,那么很难搜索这个问题。

我的问题实际上是与已经以每周数字数据形式存在的源数据有关,但是没有像日期时间戳这样的时间或日期数据。

形式如下:(请使用竖线对每一行进行逻辑对齐。)

Unique_Entity(string) | WK1(float64) | WK2(float64) | WK3(float64)| ...
UE1 | 123 | 234 | 345 | ...
UE2 | 456 | 567 | 678 | ...
UE3 | 789 | 890 | 901 | ...
... | ... | ... | ... | ...

此外,WK1是一个“动态”描述,表示数值数据是上周,WK2是两周前,WK3是三周前,依此类推。因此,下周WK1的数据将转移到WK2,并将新数据添加到WK1。希望从我的描述中讲得通。

这是源数据格式,我想使用熊猫和其他python模块提供的时间序列工具分析此实时数据。他们中的许多人都使用显式的日期列来获取其余的分析结果。

总结问题:如何转换或准备我的源数据,以便可以轻松使用这些工具? (除了下面我的天真解决方案。)

天真解决方案:我可以标记每周倒退的星期一(或星期五)的日期。 (一个使用今天的日期来生成每个星期一(或星期五)回溯的日期的函数。)然后,我可以指出那些时间序列工具以使用这些日期并将其重新采样为周。

这是假设我没有旋转水平标题,以便WK1将与上周一(或周五)的日期等一起加入。

1 个答案:

答案 0 :(得分:2)

创建一个今天结束的DatetimeIndex,将其倒数1周,然后将其分配给各列:

df.columns = pd.date_range(end=datetime.date.today(), periods=len(df.columns),
                           freq='1W-MON')[::-1]

它给出:

     2019-06-10  2019-06-03  2019-05-27
UE1         123         234         345
UE2         456         567         678
UE3         789         890         901

根据需要转置结果。