2016-01-14 4 views
2

У меня есть следующий dataframe.Преобразование данных в базу данных pandas

order_id Clusters 
0 519  Cluster 5 
1 520  Cluster 1 
2 521  Cluster 1 
3 523  Cluster 5 
4 524  Cluster 1 
5 525  Cluster 4 
6 526  Cluster 4 
7 527  Cluster 1 
8 528  Cluster 2 
9 529  Cluster 5 
10 530  Cluster 6 
11 531  Cluster 3 
12 532  Cluster 1 
13 533  Cluster 4 
14 534  Cluster 5 
15 535  Cluster 5 

Я хочу следующую серию из выше данныхframe.

Cluster 1 [520 ,521, 524, 527, 532] 
Cluster 2 [528] 
Cluster 3 [531] 
Cluster 4 [525,526,533] 
Cluster 5 [519,523,529,534,535] 
Cluster 6 [530] 

Это мой подход в питоне.

clusters_order_id = [] 

df_clusters = df.groupby('Clusters') 

for i in df_clusters['order_id']: 
    clusters_order_id.append(i) 

, который дает мне

clusters_order_id 
Out[196]: 
0 (Cluster 1, [520, 521, 524, 527, 532]) 
1      (Cluster 2, [528]) 
2      (Cluster 3, [531]) 
3    (Cluster 4, [525, 526, 533]) 
4 (Cluster 5, [519, 523, 529, 534, 535]) 
5      (Cluster 6, [530]) 

Но я не получаю, как отделить выше в ряды данной формы. Так что кластер 1, кластер 2 станет моим индексом, а соответствующие идентификаторы заказа будут массивом. Пожалуйста помоги.

ответ

1

Вы можете использовать groupby и tolist:

print df.groupby('Clusters')['order_id'].apply(lambda x: x.tolist()) 

Clusters 
Cluster 1 [520, 521, 524, 527, 532] 
Cluster 2      [528] 
Cluster 3      [531] 
Cluster 4    [525, 526, 533] 
Cluster 5 [519, 523, 529, 534, 535] 
Cluster 6      [530] 
Name: order_id, dtype: object 

Хронометраж:

In [153]: %timeit df.groupby('Clusters')['order_id'].apply(lambda x: x.tolist()) 
1000 loops, best of 3: 751 µs per loop 

In [154]: %timeit df.pivot_table(index='Clusters', aggfunc=pd.Series.tolist) 
100 loops, best of 3: 3.55 ms per loop 
+0

Благодаря человеку. Это workrs .. спасибо – Neil

2

Другое решение с pivot_table:

In [473]: df.pivot_table(index='Clusters', aggfunc=pd.Series.tolist) 
Out[473]: 
          order_id 
Clusters 
Cluster 1 [520, 521, 524, 527, 532] 
Cluster 2      [528] 
Cluster 3      [531] 
Cluster 4   [525, 526, 533] 
Cluster 5 [519, 523, 529, 534, 535] 
Cluster 6      [530] 
Смежные вопросы