2017-11-11 6 views

答えて

3

import pandas as pd 

df = pd.DataFrame({'mmddyyyy':['1/22/17']*5, 
        'customer_id':[1,1,2,2,2], 
        'order_id':[67,67,50,51,51], 
        'item_id':['hat','hat','pants','hat','pants']}) 

df 

出力:

customer_id item_id mmddyyyy order_id 
0   1  hat 1/22/17  67 
1   1  hat 1/22/17  67 
2   2 pants 1/22/17  50 
3   2  hat 1/22/17  51 
4   2 pants 1/22/17  51 

さて、その後、applylistreset_indexgroupbyを実行してみましょう:

df.groupby(['mmddyyyy','customer_id','order_id'])['item_id']\ 
    .apply(list).reset_index() 

出力RESU lt df:

mmddyyyy customer_id order_id  item_id 
0 1/22/17   1  67 [hat, hat] 
1 1/22/17   2  50  [pants] 
2 1/22/17   2  51 [hat, pants] 
+0

私に勝つ戦略のように見えます! – piRSquared

1

次のようにします。

import pandas as pd 

dataframe_top = pd.read_csv('your_file.csv') 
dataframe_bottom = dataframe_top.groupby('order_id').agg({ 
    'mmddyyyy': 'first', 
    'customer_id': 'first', 
    'item_id': lambda x: list(x) 
}).reset_index() 

あるいは、以下にさらに動作するはず:

import pandas as pd 

dataframe_top = pd.read_csv('your_file.csv') 
dataframe_bottom = dataframe_top\ 
    .groupby(['mmddyyyy', 'customer_id', 'order_id'])\ 
    .apply(list)[['item_id']]\ 
    .reset_index() 

の両方の場合において、我々は、order_idによってグループ化、およびカラムitem_idに機能listを適用しています。 2番目のケースでは、最初の3つの列によるグループ化は、結果の表の行構造を変更しません。なぜなら、すべての指図IDはmmddyyyycustomer_idと同じであるからです。

groupby方法については、以下を参照してください。 https://chrisalbon.com/python/pandas_apply_operations_to_groups.html

agg方法については、以下を参照してください。 (それが唯一のgroupbyメソッドの最後に追加することができ、すなわち、groupbyオブジェクトのメソッド、) http://pandas.pydata.org/pandas-docs/stable/comparison_with_sql.html (リンクでIn [20]:In [21]:までスクロールダウンします。)

EDIT:最後の注意:あなたはこのよろしいですあなたが欲しいものは何ですか?これはいくつかの究極の目標への中間的なステップに似ています。私はあなたの究極の目標は実際にこの変換を必要としないが、他のいくつかのgroupby機能性を必要とすると確信しています。代わりに最終目標を達成する方法について質問することを検討してください。

関連する問題