Pandas:如何在每只Pandas上绘制年度数据

2024-10-02 18:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一系列按时间值索引的数据(一个浮点数),我想把这一系列的数据分成几块,然后把它们放在一起。举个例子,假设我在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长的块,然后将它们相互叠加。所以如果数据是20*T长,那么在同一个图中我会有20条线。在

很抱歉,我用了股票的比喻,认为这可能会有所帮助。在


Tags: 数据dfnp时间绘制价格cn例子
2条回答

让我试着回答这个问题。基本上我会垫或重新索引完整的工作日和样品每5天,而下降由于假期或暂停丢失的数据

>>> coke = DataReader('KO', 'yahoo', start=datetime(2012,1,1))

>>> startd=coke.index[0]-timedelta(coke.index[0].isoweekday()-1)

>>> rng = array(DateRange(str(startd), periods=90))

>>> chunk=[]

>>> for i in range(18):

... chunk.append(coke[i*5:(i+1)*5].dropna())

...

然后你可以循环块来绘制每周的数据

假设一个pandas.TimeSeries对象作为起点,您可以分组 按ISO周数和ISO工作日列出的元素 ^{}。下面的语句忽略了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

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

^{pr2}$

最后一步是从 多索引,为每个工作日创建列,并将工作日编号替换为缩写,以提高可读性。在

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

要为每周创建一个线图,请转置dataframe,这样列是周编号,行是工作日(注意,在上一步中,可以通过取消周编号而不是工作日来避免此步骤),并调用plot。在

grid.T.plot()

相关问题 更多 >