2014-10-23 7 views
6

creo un dataframe panda con un DatetimeIndex in questo modo:Quando tracciare dati dell'indice datetime, messo marcatori nella trama in giorni specifici (ad esempio, fine settimana)

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

# create datetime index and random data column 
todays_date = datetime.datetime.now().date() 
index = pd.date_range(todays_date-datetime.timedelta(10), periods=14, freq='D') 
data = np.random.randint(1, 10, size=14) 
columns = ['A'] 

df = pd.DataFrame(data, index=index, columns=columns) 

# initialize new weekend column, then set all values to 'yes' where the index corresponds to a weekend day 
df['weekend'] = 'no' 
df.loc[(df.index.weekday == 5) | (df.index.weekday == 6), 'weekend'] = 'yes' 

print(df) 

che dà

  A weekend 
2014-10-13 7  no 
2014-10-14 6  no 
2014-10-15 7  no 
2014-10-16 9  no 
2014-10-17 4  no 
2014-10-18 6  yes 
2014-10-19 4  yes 
2014-10-20 7  no 
2014-10-21 8  no 
2014-10-22 8  no 
2014-10-23 1  no 
2014-10-24 4  no 
2014-10-25 3  yes 
2014-10-26 8  yes 

posso facilmente tracciare la A colum con i panda facendo:

df.plot() 
plt.show() 

che traccia una linea delColonnama lascia fuori la colonna weekend in quanto non contiene dati numerici.

Plot of 'A' but not of 'weekend'

Come faccio a mettere un "marker" su ogni punto della colonna A dove la colonna weekend ha il valore yes?

risposta

7

Nel frattempo ho scoperto che è semplice come utilizzare l'indicizzazione booleana nei panda. Facendo la trama direttamente con pyplot anziché l'involucro trama panda (che è più conveniente per me):

plt.plot(df.index, df.A) 
plt.plot(df[df.weekend=='yes'].index, df[df.weekend=='yes'].A, 'ro') 

Plot of 'A' with weekend markers

Ora, i punti rossi Segna tutti i giorni del fine settimana, che sono date da df.weekend='yes' valori.

+2

Si potrebbe accorciare uno smidge con 'df ['A'] [df ['weekend'] == 'si']. Trama (style = 'ro')' che è un po 'più leggibile (IMO) ma ancora, bella auto-risposta. – Ffisegydd

Problemi correlati