2017-09-06 5 views
1

를, 값 팬더 dataframe 그룹화 내가 이런 팬더 dataframe을

dd = pd.DataFrame(
{'name': ['abc','bcd','abc'], 
'seconds': [75,77,90], 
}) 
내가 같은 이름을 가진 행에 대한 하나의 목록으로 초 열을 결합해야

enter image description here

.

나는, 루프이 사용을 할 수 있어요

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, 
}) 

출력 :

enter image description here

그러나 이것은 큰 dataframe에 시간이 많이 걸립니다. for 루프없이 이것을 달성하는 간단한 방법은 없습니까?

감사합니다.

답변

2

사용 groupbylistapply과 :

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

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

사용 groupby, aggtolist :

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

출력 :

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