2017-09-06 3 views
1

ich Pandas Datenrahmen wie diese haben,Pandas Datenrahmen Gruppierung Werte

dd = pd.DataFrame(
{'name': ['abc','bcd','abc'], 
'seconds': [75,77,90], 
}) 

enter image description here

Ich brauche die Sekunden Spalte in einer einzigen Liste für die Zeilen mit dem gleichen Namen zu kombinieren.

Ich bin in der Lage, dies mit for-Schleife zu tun,

names= list(set(dd['name'])) 
counter=[] 
for a in names: 
    counter.append(list(dd[dd['name'] == a]['seconds'])) 
end 
seconds_list = pd.DataFrame(
{'name': names, 
'seconds': counter, 
}) 

Ausgang:

enter image description here

Aber das braucht viel Zeit auf einem großen Datenrahmen. Eine einfache Möglichkeit, dies ohne eine for-Schleife zu erreichen?

Danke!

Antwort

2

Verwenden groupby mit applylist:

df = dd.groupby('name')['seconds'].apply(list).reset_index() 
print (df) 

    name seconds 
0 abc [75, 90] 
1 bcd  [77] 
1

Verwenden groupby, agg und tolist:

dd.groupby('name')['seconds'].agg(lambda x: x.tolist()).reset_index(name='seconds') 

Output:

name seconds 
0 abc [75, 90] 
1 bcd  [77] 
Verwandte Themen