簡體   English   中英

熊貓:如何在彼此之上繪制年度數據

[英]Pandas: how to plot yearly data on top of each other

我有一系列由時間值(浮點數)索引的數據,我想要獲取系列的塊並將它們繪制在一起。 例如,假設我在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行。

對困惑感到抱歉; 我使用股票類比認為它可能有所幫助。

假設以pandas.TimeSeries對象為起點,您可以使用datetime.date.isocalendar()按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

可能有更簡潔的方法來執行下一步,但目標是將索引從元組數組更改為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()

讓我試着回答這個問題。 基本上我將填寫或重新索引整個工作日並每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())

...

然后你可以循環塊來繪制每周數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM