Pandas gruppieren mit dict

Ist es möglich, ein Dict zu verwenden, um Elemente einer Spalte zu gruppieren?

Beispielsweise:

In [3]: df = pd.DataFrame({'A' : ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'], ...: 'B' : np.random.randn(8)}) In [4]: df Out[4]: AB 0 one 0.751612 1 one 0.333008 2 two 0.395667 3 three 1.636125 4 two 0.916435 5 two 1.076679 6 one -0.992324 7 three -0.593476 In [5]: d = {'one':'Start', 'two':'Start', 'three':'End'} In [6]: grouped = df[['A','B']].groupby(d) 

Diese (und andere Variationen) gibt ein leeres groupby-Objekt zurück. Und meine Variationen über die Verwendung .apply alle scheitern auch.

Ich möchte die Werte von Spalte A an die Schlüssel des Wörterbuchs anpassen und Zeilen in die durch die Werte definierten Gruppen setzen. Die Ausgabe würde so aussehen:

  Start: AB 0 one 0.751612 1 one 0.333008 2 two 0.395667 4 two 0.916435 5 two 1.076679 6 one -0.992324 End: AB 3 three 1.636125 7 three -0.593476 

2 Solutions collect form web for “Pandas gruppieren mit dict”

Von den docs muss der dict von etiketten zu gruppennamen karten, also wird das funktionieren, wenn man 'A' in den index setzt:

 grouped2 = df.set_index('A').groupby(d) for group_name, data in grouped2: print group_name print '---------' print data # Output: End --------- B A three -1.234795 three 0.239209 Start --------- B A one -1.924156 one 0.506046 two -1.681980 two 0.605248 two -0.861364 one 0.800431 

Spaltennamen und Zeilenindizes sind beide Etiketten , wohingegen, bevor Sie 'A' in den Index setzen, die Elemente von 'A' Werte sind .

Wenn Sie andere Informationen im Index haben, die einen set_index() tricky machen, können Sie einfach eine Gruppierungsspalte mit map() erstellen:

 df['group'] = df['A'].map(d) grouped3 = df.groupby('group') 

Sie können mit einem Wörterbuch gruppieren, aber (wie bei jeder Gruppe durch den Betrieb) müssen Sie zuerst die Indexspalte setzen.

 grouped = df.set_index("A").groupby(d) list(grouped) # [('End', B # A # three -1.550727 # three 1.048730 # # [2 rows x 1 columns]), ('Start', B # A # one -1.552152 # one -2.018647 # two -0.968068 # two 0.449016 # two -0.374453 # one 0.116770 # # [6 rows x 1 columns])] 
  • Pivot-Tabelle Probleme: Fehler 'Keine numerischen Typen zu aggregieren'
  • Boolesche Matrix aus einer Spalte mit Pandas erstellen
  • Lokalisieren Sie die numerische Position eines nicht numerischen Indexwertes
  • Bedingte Summen für Pandas aggregate
  • Wie konvertiere ich eine URL-Anforderung in einen Pandas DataFrame?
  • Pandas-Stil Transformation von gruppierten Daten auf pyspark DataFrame
  • Excel VLOOKUP-Äquivalent in Pandas
  • Tput: terminale Attribute: Kein solches Gerät oder Adresse in Windows Pycharm Debugger
  • PyInstaller und Pandas
  • Pandas verschmelzen zwei Dataframes mit verschiedenen Spalten
  • Pandas- Split Text in Spalte und Suche in Zeilen
  • Python ist die beste Programmiersprache der Welt.