2017-01-09 5 views
0

Gegeben Ich habe zwei Zeitreihen (oder zwei Spalten in einem Datenrahmen) wie folgt aus:Beschriften Zeitreihe Grundstück von zwei Zeitreihen Verschmelzung

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) 

Ich möchte ein Grundstück von ts1.plot() zu tun, wo ts2 verwendet wird ts1 mit Anmerkungen versehen Zeitreihe, aber ich möchte nur die Zeitstempel, die <> NOT sind, kommentieren.

Was ich bisher gefunden habe, ist die Verwendung von Markern würde was ich suche. Zum Beispiel mit einer Markierung für "HE" und einer anderen für "SHE" und keine Markierung für "NOT". Jedoch kann ich nicht herausfinden, wie man eine andere Zeitreihe als Eingabe verwendet und nur die Zeitstempel <> irgendeinen Wert annotiert.

Antwort

0

Sie können die Methode pandas dataframe groupby verwenden, um das Dataset nach den verwendeten Beschriftungen zu teilen und die Werte zu ignorieren, die nicht gezeichnet werden sollen.

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() 
Verwandte Themen