Ich habe das folgende DataFrame namens Pop:

California  2000    33871648
            2010    37253956
New York    2000    18976457
            2010    19378102
Texas       2000    20851820
            2010    25145561

Ich möchte Werte von 2010 in Kalifornien und Texas ausdrucken. Immer wenn ich pop[['California','Texas'], 2010] versuche, erhalte ich den Fehler '(['California', 'Texas'], 2010)' is an invalid key Wie kann ich die Informationen dann ausdrucken?

1
Dima Sidukov 19 Aug. 2020 im 17:37

2 Antworten

Beste Antwort

TLDR

df.loc[(level_1_indices_list, level_2_indices_list), :]

Das heißt, in diesem Fall:

df.loc[(['California','Texas'], ['2010']), :]

Unten finden Sie eine ausführlichere Version.


# import packages & set seed
import numpy as np
import pandas as pd
np.random.seed(42)

Erstellen Sie einen Beispieldatenrahmen

Verwenden von den Pandas-Dokumenten:

arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
          np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]

s = pd.Series(np.random.randn(8), index=arrays)

df = pd.DataFrame(np.random.randn(8, 4), index=arrays)

Das wird so aussehen:

enter image description here


Schneiden mit Multiindex

Mit df können Sie Folgendes tun:

df.loc[(['qux','foo'], 'one'), :]

Aus Gründen der Konsistenz der Notation können Sie [] für das zweite Element des Slice verwenden:

df.loc[(['qux','foo'], ['one']), :]

Was das gleiche Ergebnis ergibt.

Welches ist:

enter image description here

(Die Auswahl von 'one' entspricht der Auswahl von 2010 in Ihrem df. ['qux','foo'] sollte der Auswahl von ['California', 'Texas'] entsprechen. Basierend darauf Ich denke, Sie können die Schritte hier auf Ihre Daten anwenden.)


Dies kann ebenfalls hilfreich sein.

1
zabop 19 Aug. 2020 im 15:32

Ich würde so etwas mit der Angabe von Spaltennamen tun, die durch Hinzufügen weiterer & erweitert werden können

df.loc[(df['level_0'].isin(['California', 'Texas'])) & (df['level_1'].isin(['2010']))]

0
geekzeus 19 Aug. 2020 im 15:51