熊猫:如何相互绘制年度数据

发布于 2021-01-29 16:12:22

我有一系列按时间值(浮点数)索引的数据,我想提取一系列数据并将它们相互叠加。例如,假设我在20周的时间内大约每10分钟获取一次股价,并且我想绘制20条线的股价来查看每周模式。所以我的X轴是一个星期,我有20条线(对应于该周的价格)。

更新

索引不是均匀间隔的值,而是一个浮点数。就像这样:

t = np.arange(0,12e-9,12e-9/1000.0)
noise = np.random.randn(1000)/1e12
cn = noise.cumsum()
t_noise = t+cn
y = sin(2*math.pi*36e7*t_noise) + noise
df = DataFrame(y,index=t_noise,columns=["A"])
df.plot(marker='.')
plt.axis([0,0.2e-8,0,1])

因此索引不是均匀分布的。我正在处理来自模拟器的电压与时间的数据。我想知道如何创建一个时间窗口T,并将df拆分为T
long的块,并将它们绘制在彼此的顶部。因此,如果数据的长度为20 * T,那么在同一图中将有20条线。

对困惑感到抱歉; 我用股票类比的方式认为可能会有所帮助。

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    假设以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]: daily
    Out[96]: 
    key_0
    (1, 1)     63
    (1, 2)     91
    (1, 3)     73
    ...
    (20, 5)    82
    (20, 6)    53
    (20, 7)    63
    Length: 140
    

    可能有一种更干净的方法来执行下一步,但目标是将索引从元组数组更改为MultiIndex对象。

    In [97]: daily.index = pandas.MultiIndex.from_tuples(daily.index, names=['W', 'D'])
    
    In [98]: daily
    Out[98]: 
    W   D
    1   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    63
    Length: 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]: grid
    Out[104]: 
        Mon  Tue  Wed  Thu  Fri  Sat  Sun
    W                                    
    1    63   91   73   88   84   95   72
    2    66   77   96   72   56   80   66
    ...
    19   56   69   89   69   96   73   80
    20   81   53   78   64   82   53   63
    

    要为每周创建一个折线图,请转置数据框,使列为周数,行为工作日(请注意,可以通过在上一步中取消堆叠周数来代替工作日来避免此步骤),并调用plot

    grid.T.plot()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看