我有像这样的pandas数据框,
dd = pd.DataFrame(
{'name': ['abc','bcd','abc'],
'seconds': [75,77,90],
})
我需要将seconds列合并为具有相同名称的行的单个列表。
我能够使用for循环,
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,
})
输出:
但这需要花费大量时间在一个大数据帧上。没有for循环的任何简单方法来实现这个目标吗?
谢谢!
答案 0 :(得分:2)
df = dd.groupby('name')['seconds'].apply(list).reset_index()
print (df)
name seconds
0 abc [75, 90]
1 bcd [77]
答案 1 :(得分:1)
使用groupby
,agg
和tolist
:
dd.groupby('name')['seconds'].agg(lambda x: x.tolist()).reset_index(name='seconds')
输出:
name seconds
0 abc [75, 90]
1 bcd [77]