我有一个如下所示的数据框,其中一张票证具有与其关联的多个项目。
| ticket_no | items |
|-----------|-------|
| 1 | Item1 |
| 1 | Item2 |
| 2 | Item3 |
| 2 | Item4 |
| 3 | Item5 |
| 3 | Item6 |
| 3 | Item7 |
| 3 | Item8 |
需要如下输出。
[[Item1, Item2],[Item3, Item4], [Item5, Item6, Item7, Item8]]
我尝试了以下代码。它可以工作,但是速度非常慢。
data = pd.read_csv('data.csv')
item_list = []
for ticket_no in data['ticket_no'].unique():
temp_data = list(data[data['ticket_no'] == ticket_no]['items'])
if len(temp_data) == 1:
pass
else:
item_list.append(temp_data)
有更快的方法吗?
答案 0 :(得分:4)
将DataFrame.groupby
与list
一起使用到Series
,然后将其转换为list
s-输出是嵌套列表:
item_list = data.groupby('ticket_no')['items'].apply(list).tolist()
print (item_list)
[['Item1', 'Item2'], ['Item3', 'Item4'], ['Item5', 'Item6', 'Item7', 'Item8']]