2017-06-23 5 views
0

Diese Frage ist ähnlich wie eine Frage here, aber mit einem Tupel-Index. eine Spalte von Listen Gruppierung arbeitet für einen einzelnen Index fein:pandas groupby: Aggregieren von Listen mit einem Tupel-Index

mydata = [{'idx': 'A', 'list_str': ['hi', 'babe']}, 
      {'idx': 'A', 'list_str': ['take', 'a', 'walk']}, 
      {'idx': 'A', 'list_str': []}, 
      {'idx': 'B', 'list_str': ['on', 'the', 'wild', 'side']}] 


df = pd.DataFrame(mydata) 
grouped = df.groupby('idx') 
print(grouped.agg({'list_str': lambda x: tuple(x)})) 

Mit dem erwarteten Ausgang:

idx  list_str 
A  [hi, babe, take, a, walk] 
B  [on, the, wild, side] 

jedoch ein zweiter Index nicht mehr das Hinzufügen funktioniert:

mydata = [{'idx': 'A', 'idx2': 'B', 'list_str': ['hi', 'babe']}, 
      {'idx': 'A', 'idx2': 'B', 'list_str': ['take', 'a', 'walk']}, 
      {'idx': 'A', 'idx2': 'B', 'list_str': []}, 
      {'idx': 'B', 'idx2': 'C', 'list_str': ['on', 'the', 'wild', 'side']}] 

df = pd.DataFrame(mydata) 
grouped = df.groupby(('idx', 'idx2')) 
print(grouped.agg({'list_str': sum})) 

Gewährt a ValueError, Function does not reduce.

Was ist der richtige Weg, dies zu tun?

Antwort

0

Zur Gruppe von mehreren Spalten verwenden, um eine Liste:

grouped = df.groupby(['idx', 'idx2']) 
print(grouped.agg({'list_str': sum})) 

Möglicherweise Sie dachten, Sie taten:

df['new_index'] = df.apply(lambda row: (row['idx'],row['idx2']), axis=1) 
df.set_index('new_index',inplace=True) 

grouped = df.groupby(df.index) 
print(grouped.agg({'list_str': sum})) 
+0

Haben Sie den Code versucht? Dies gibt tatsächlich den gleichen genauen Fehler. – nbubis

+0

Ich habe es versucht, mit genau der Eingabe, die Sie zur Verfügung gestellt. Haben Sie eine Liste '[]' anstelle eines Tupels '()' in der Groupby-Call-Funktion verwendet? Oder sind Ihre Eingabedaten falsch konstruiert, da sie zwei separate Indizes anstelle eines einzelnen Tupelindexes haben? – jack6e

+0

mit der gleichen 'mydata' Variable und 'df = pd.DataFrame (mydata); gruppiert = df.groupby (['idx', 'idx2']); print (grouped.agg ({'list_str': sum})) 'gibt den gleichen Fehler unter Verwendung der Pandas-Version 0.19.2. – nbubis