2016-08-10 3 views
3

Ich habe einen Pandas Datenrahmen, wo eine der Spalten Wörterbuchtyp ist. Dies ist ein Beispiel Datenrahmen:Gruppieren Pandas Datenrahmen durch einen verschachtelten Wörterbuchschlüssel

import pandas as pd 
df = pd.DataFrame({'a': [1,2,3], 
        'b': [4,5,6], 
        'version': [{'major': 7, 'minor':1}, 
           {'major':8, 'minor': 5}, 
           {'major':7, 'minor':2}] }) 

df:

a b     version 
0 1 4 {'minor': 1, 'major': 7} 
1 2 5 {'minor': 5, 'major': 8} 
2 3 6 {'minor': 2, 'major': 7} 

Ich bin auf der Suche nach einem Weg zur Gruppe des Datenrahmen von einem dieser Wörterbuch-Taste; In diesem Fall, um die df Datenrahmen durch die Haupt Schlüssel in Version Label zu gruppieren.

ich ein paar verschiedene Sachen ausprobiert habe, aus dem Wörterbuch Schlüssel zur Datenrahmen groupby Funktion übergeben, `df.groupby ([‚Version‘] [‚major‘]), die nicht seit großen funktioniert nicht Teil des Dataframe-Labels, um Version dem Dataframe-Index zuzuweisen, aber nichts funktioniert so weit. Ich versuche auch, die Wörterbücher als zusätzliche Spalten im Datenrahmen selbst zu verflachen, aber das scheint ein eigenes Problem zu haben.

Irgendeine Idee?

P.S. Sorry wegen der Formatierung, es ist meine erste Stackoverflow-Frage.

Antwort

3

Option 1

df.groupby(df.version.apply(lambda x: x['major'])).size() 

version 
7 2 
8 1 
dtype: int64 

df.groupby(df.version.apply(lambda x: x['major']))[['a', 'b']].sum() 

enter image description here

Option 2

df.groupby(df.version.apply(pd.Series).major).size() 

major 
7 2 
8 1 
dtype: int64 

df.groupby(df.version.apply(pd.Series).major)[['a', 'b']].sum() 

enter image description here

+0

i Ihre Version – MaxU

+0

Excellent gefällt! Ich glaube nicht, dass "apply" -Funktion als Index-Selektor für den Datenrahmen funktioniert. Danke, @piRSquared! – RexIncognito

2

Sie können es auf diese Weise tun:

In [15]: df.assign(major=df.version.apply(pd.Series).major).groupby('major').sum() 
Out[15]: 
     a b 
major 
7  4 10 
8  2 5 
+1

Ich habe noch nie zuvor 'assign' gesehen. Ich habe heute etwas Neues gelernt. – piRSquared

+0

Yeah, 'assign' hätte mir so viele' concat' und 'merge' erspart. – RexIncognito

Verwandte Themen