2013-03-25 10 views
6

Desidero specificare resample a DataFrame con un multiindice che contiene sia una colonna datetime che un'altra chiave. Il dataframe assomiglia:Ricampionamento di un DataFrame con più indici

import pandas as pd 
from StringIO import StringIO 

csv = StringIO("""ID,NAME,DATE,VAR1 
1,a,03-JAN-2013,69 
1,a,04-JAN-2013,77 
1,a,05-JAN-2013,75 
2,b,03-JAN-2013,69 
2,b,04-JAN-2013,75 
2,b,05-JAN-2013,72""") 

df = pd.read_csv(csv, index_col=['DATE', 'ID'], parse_dates=['DATE']) 
df.columns.name = 'Params' 

Perché ricampionamento è consentito solo su DataTime indici, ho pensato unstacking l'altra colonna di indice sarebbe di aiuto. E in effetti lo fa, ma non posso impilarlo di nuovo in seguito.

print df.unstack('ID').resample('W-THU') 

Params  VAR1  
ID    1  2 
DATE      
2013-01-03  69 69.0 
2013-01-10  76 73.5 

Ma poi stacking 'ID' risultati ancora una volta in un indice-error:

print df.unstack('ID').resample('W-THU').stack('ID') 

IndexError: index 0 is out of bounds for axis 0 with size 0 

Stranamente, posso impilare l'altro livello di colonna sia con:

print df.unstack('ID').resample('W-THU').stack(0) 

e

print df.unstack('ID').resample('W-THU').stack('Params') 

L'errore indice si verifica anche se riordino (scambia) entrambi i livelli di colonna. Qualcuno sa come superare questo problema?

+2

Ho postato questo come [un problema su github] (https://github.com/pydata/pandas/issues/3170). –

+0

Grazie, non ero sicuro se sarebbe stato un problema o solo me. Ma la risposta sotto mostra chiaramente che lo è. –

+0

Questo è [riparato] (https://github.com/pydata/pandas/pull/3225) nel master (quindi lo vedrai in 0.11). –

risposta

8

L'esempio disimpegna una colonna non numerica "NAME" che viene rilasciata automaticamente ma causa problemi durante il re-stacking. Il codice seguente ha funzionato per me

print df[['VAR1']].unstack('ID').resample('W-THU').stack('ID') 
Params   VAR1 
DATE  ID 
2013-01-03 A 69.0 
      B 69.0 
2013-01-10 A 76.0 
      B 73.5 
+0

Grazie! Ho notato la caduta, ma non ha mai causato problemi in altre situazioni, quindi non pensavo che sarebbe stato il problema. –

Problemi correlati