2015-12-04 3 views
0

У меня есть панд dataframe в транзакционной формате:Преобразование панд dataframe в транзакционной формат данных в списке - Python

id purchased_item 
1 apple 
1 banana 
1 carrot 
2 banana 
3 apple 
4 apple 
4 carrot 
4 diet coke 
5 banana 
5 carrot 
6 banana 
6 carrot 

Я хотел бы преобразовать это следующим образом:

[['apple', 'banana', 'carrot'], 
['banana'], 
['apple'], 
['apple', 'carrot', 'diet coke'], 
['banana', 'carrot'], 
['banana', 'carrot']] 

Я попытался это:

df.groupby(['id'])['purchased_item'].apply(list) 

выход выглядит следующим образом:

customer_id 
1     [apple, banana, carrot] 
2        [banana] 
3         [apple] 
4    [apple, carrot, diet coke] 
5      [banana, carrot] 
6      [banana, carrot] 

Что делать дальше? Или есть другой подход? Большое спасибо за помощь.

+0

Ответ на этот вопрос здесь: Http: //stackoverflow.com/questions/34080979/convert-pandas-dataframe-to-a-list#34081130 –

+0

Для меня, это другой вопрос, потому что исходные данные в другом формате. Поэтому я ищу другое решение. – kevin

+0

Я нашел решение отсюда http://stackoverflow.com/questions/15112234/converting-dataframe-into-a-list – kevin

ответ

1

Решение, которое вы упомянули в комментарии от ответа на question:

df.groupby(['id'])['purchased_item'].apply(list).values.tolist() 

In [434]: df.groupby(['id'])['purchased_item'].apply(list).values.tolist() 
Out[434]: 
[['apple', 'banana', 'carrot'], 
['banana'], 
['apple'], 
['apple', 'carrot', 'diet_coke'], 
['banana', 'carrot'], 
['banana', 'carrot']] 

EDIT

Некоторые тест производительности для сравнения с @Colonel Beauvel раствором:

In [472]: %timeit [gr['purchased_item'].tolist() for n, gr in df.groupby('id')] 
100 loops, best of 3: 2.1 ms per loop 

In [473]: %timeit df.groupby(['id'])['purchased_item'].apply(list).values.tolist() 
1000 loops, best of 3: 1.36 ms per loop 
1

I предпочла бы использовать другое решение, используя список понятий:

[gr['purchased_item'].tolist() for n, gr in df.groupby('id')] 

Out[9]: 
[['apple', 'banana', 'carrot'], 
['banana'], 
['apple'], 
['apple', 'carrot', 'dietcoke'], 
['banana', 'carrot'], 
['banana', 'carrot']] 
Смежные вопросы