2017-03-16 2 views
1

Ich habe ein Panel stocks die ['volume'], ['30_Avg_Vol'] and ['20_Avg_Vol'] als Achsen haterhalte eine Fehlermeldung mit Pandas-Panel boolean Indizierung

stocks.Volume 
        AAPL  OPK 
Date        
010-01-11 115557365.0 130195.0 
2010-01-12 148614774.0 121245.0 
2010-01-13 151472335.0 47897.0 
2010-01-14 108288411.0 126539.0 
2010-01-15 148584065.0 175261.0 
2010-01-19 182501620.0 123318.0 
2010-01-20 153037892.0 100803.0 
2010-01-21 152038565.0 262285.0 
2010-01-22 220441872.0 114525.0 


stocks['30_Avg_Vol'] 
Date    AAPL   OPK 
2010-01-21   NaN   NaN 
2010-01-22   NaN   NaN 
2010-01-25 1.526774e+08 1.607402e+05 
2010-01-26 1.723086e+08 1.592968e+05 
2010-01-27 1.875047e+08 1.554605e+05 
2010-01-28 1.933864e+08 1.540021e+05 
2010-01-29 1.996023e+08 1.549712e+05 
2010-02-01 1.989956e+08 1.532240e+05 

stocks['20_Avg_Vol'] 
        AAPL   OPK 
Date       
2010-01-12   NaN   NaN 
2010-01-13   NaN   NaN 
2010-01-14   NaN   NaN 
2010-01-15 1.315716e+08 1.718937e+05 
2010-01-19 1.362016e+08 1.674777e+05 
2010-01-20 1.376046e+08 1.619215e+05 
2010-01-21 1.387149e+08 1.696418e+05 
2010-01-22 1.445526e+08 1.657049e+05 
2010-01-25 1.526774e+08 1.607402e+05 
2010-01-26 1.723086e+08 1.592968e+05 
2010-01-27 1.875047e+08 1.554605e+05 

Ich versuche, die Platte in der folgenden Art und Weise

stocks[(stocks['Volume']> (1.5 * stocks['30_Avg_Vol']))|(stocks['Volume']> (1.5* stocks['20_Avg_Vol']))] 

überall dort, wo zu schneiden, die Das Volumen ist größer als das 1,5-fache des 30-Tage-Durchschnittsvolumens oder des 20-Tage-Durchschnittsvolumens.

aber ich erhalte den folgenden Fehler:

raise ValueError('Cannot index with multidimensional key') 
ValueError: Cannot index with multidimensional key 

Jede Art und Weise um dieses?

Danke.

Antwort

1

Sie haben eine MultiIndex. Um in eine MultiIndex zu indizieren, müssen Sie Ihre Schlüssel paarweise (oder in Triplets usw.) angeben.

Der einfachste Weg, dies zu umgehen ist zu einem singulären Index zurück:

So:

stocks[(stocks['Volume']> (1.5 * stocks['30_Avg_Vol']))|(stocks['Volume']> (1.5* stocks['20_Avg_Vol']))] 

Becomes:

_stocks = stocks.reset_index() 

_stocks[(_stocks['Volume']> (1.5 * _stocks['30_Avg_Vol']))|(_stocks['Volume']> (1.5* _stocks['20_Avg_Vol']))] 
+0

Danke für die Antwort. Ich kann den Code noch nicht testen, werde aber sofort antworten. =) – Moondra

+0

Also, wenn ich diesen Code ausführen: '_stocks = stocks.reset_index()' Ich bekomme den folgenden Fehler: 'AttributeError: 'Panel' Objekt hat kein Attribut 'reset_index' Der Unterstrich wenn vorne von Aktien, was genau tut das tun? Vielen Dank. – Moondra

+1

Ah, Sie verwenden Panels; Entschuldigung, das habe ich in deiner Zusammenfassung verpasst. Wenn das nicht funktionierte, empfehle ich eigentlich * weg * wegzuziehen von dem, was du in 'Pandas 'machst, weil' Pandas' 'Panel' Objekte veraltet sind und IIRC in der nächsten Hauptversion komplett entfernt wird (' 0.20 .0'). Verwenden Sie stattdessen ['xarray'] (http://xarray.pydata.org/en/stable/), das entwickelt wurde, um' pandas.Panel' zu ersetzen. vgl. http://xarray.pydata.org/en/stable/indexing.html. Dies ist leider nicht direkt eine Antwort auf deine Frage, aber leider ... –

Verwandte Themen