2017-01-09 58 views
0
時間序列情節

鑑於我有兩個時間序列(或數據幀中的兩列)這樣的:註釋通過合併兩個時間序列

rng1 = pd.date_range('1/1/2017', periods=3, freq='H') 
ts1 = pd.Series(np.random.randn(len(rng)), index=rng) 
ts2 = pd.Series(['HE','NOT','SHE'], index=rng) 

我想要做的ts1.plot()一個圖,其中ts2用於標註TS1時間序列,但是我只想註釋<> NOT的時間戳。

我到目前爲止發現的是使用標記將是我在找什麼。例如,有一個標記爲'HE',另一個標記爲'SHE',沒有標記爲'NOT'。但我無法弄清楚如何使用另一個時間序列作爲輸入,並且只能註釋時間戳>一些值。

回答

0

您可以使用熊貓數據框groupby方法根據您正在使用的標籤拆分數據集,並忽略不想繪製的值。

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

rng = pd.date_range('1/1/2017', periods=3, freq='H') 
ts1 = pd.Series(np.random.randn(len(rng)), index=rng) 
ts2 = pd.Series(['HE','NOT','SHE'], index=rng) 
df = pd.concat([ts1, ts2], keys=['foo', 'bar'], axis=1) 

ax = None # trick to keep everything plotted on a single axis 
labels = [] # keep track of the labels you actually use 
for key, dat in df.groupby('bar'): 
    if key == 'NOT': 
     continue 
    labels.append(key) 
    ax = dat.plot(ax=ax, marker='s', ls='none', legend=False) 
# handle the legend through matplotlib directly, rather than pandas' interface 
ax.legend(ax.get_lines(), labels) 
plt.show()