假设以
pandas.TimeSeries对象为起点,则可以使用ISO周编号和ISO周日将元素分组
datetime.date.isocalendar()。以下语句(忽略ISO年)汇总了每天的最后一个样本。
In [95]: daily = ts.groupby(lambda x: x.isocalendar()[1:]).agg(lambda s: s[-1])In [96]: dailyOut[96]: key_0(1, 1) 63(1, 2) 91(1, 3) 73...(20, 5) 82(20, 6) 53(20, 7) 63Length: 140
可能有一种更干净的方法来执行下一步,但目标是将索引从元组数组更改为MultiIndex对象。
In [97]: daily.index = pandas.MultiIndex.from_tuples(daily.index, names=['W', 'D'])In [98]: dailyOut[98]: W D1 1 63 2 91 3 73 4 88 5 84 6 95 7 72...20 1 81 2 53 3 78 4 64 5 82 6 53 7 63Length: 140
最后一步是从MultiIndex中“取消堆叠”工作日,为每个工作日创建列,并将工作日数字替换为缩写,以提高可读性。
In [102]: dofw = "Mon Tue Wed Thu Fri Sat Sun".split()In [103]: grid = daily.unstack('D').rename(columns=lambda x: dofw[x-1])In [104]: gridOut[104]: Mon Tue Wed Thu Fri Sat SunW 1 63 91 73 88 84 95 722 66 77 96 72 56 80 66...19 56 69 89 69 96 73 8020 81 53 78 64 82 53 63
要为每周创建一个折线图,请转置数据框,使列为周数,行为工作日(请注意,可以通过在上一步中取消堆叠周数来代替工作日来避免此步骤),并调用
plot。
grid.T.plot()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)