2016-12-26 18 views
0

Pythonで辞書を使用してユーザーの購入履歴のシーケンスを構築したいと考えています。私は、これらの配列を日付で整列させたいと思います。Pythonで辞書を使用してデータフレームからシーケンスを構成する

私は私のデータフレームの3列があります。

users  items   date 

1    1   date_1 
1    2   date_2 
2    1   date_3 
2    3   date_1 
4    5   date_2 
4    1   date_5 
4    3   date_3 

をし、その結果は次のようにする必要があります:

df_sub = df[['uid', 'nid', 'date']] 
dic3 = df_sub.set_index('uid').T.to_dict('list') 

そして、私の結果は以下のとおりです。

{1: [[1,date_1],[2,date_2]], 2:[[3,date_1],[5,date_2],[1,date_3]], 4:[[5,date_2],[3,date_3][1,date_5]]} 

私のコードは次のとおりです。

{36864: [258509L, '2014-12-03'], 548873: [502105L, '2015-09-08'], 42327: [492268L, '2015-01-29'], 548873: [370049L, '2015-02-18'], 36864: [258909L, '2016-01-13'] ... } 

しかし、私はユーザーがグループに希望:

{36864: [[258509L, '2014-12-03'],[258909L, '2016-01-13']], 548873: [[502105L, '2015-09-08'],[370049L, '2015-02-18']], 42327: [492268L, '2015-01-29'] } 

いくつか助けて下さい!

+1

だからあなたのコードと、まさにそれに問題があるのですか? – jonrsharpe

+0

私のコードは 'df_sub = DF [[ 'uidを'、 'NID'、 '日付']]' ' dic3 = df_sub.set_index( 'UID')。T.to_dict( 'リスト')' されており、私の結果は、 '{36864:[258509L、 '2014-12-03']、548873:[502105L、'2015-09-08 ']、42327:[492268L、' 2015-01-29 ']、30732 :[370049L、 '2015-02-18']、34830:[258909L、 '2016-01-13'] ...} そして私はユーザー別にグループ化したい – Amy21

+0

[編集] mcve]。 – jonrsharpe

答えて

1

まず、ユーザーをに設定し、groupby w.r.tを実行します。次に、各グループを並べ替える関数をの日付列に渡して、.valuesを使用して基底の配列部分を抽出します。

を使用すると、list相当のものが戻ってきます。これにより、必要なフォーマットが得られます。最後に、.to_dictを使用して、最終出力を辞書として取得します。

fnc = lambda x: x.sort_values('date').values.tolist() 
df.set_index('users').groupby(level=0).apply(fnc).to_dict() 

は生成します。

{1: [[1, 'date_1'], [2, 'date_2']], 
2: [[3, 'date_1'], [1, 'date_3']], 
4: [[5, 'date_2'], [3, 'date_3'], [1, 'date_5']]} 
+1

ありがとうございました@Nickil – Amy21

+0

おそらく私は閉鎖された質問に戻りますが、私はどのようにアカウントの日付だけのリストで日付順にIDを取る機能を変更することができますかと思っていた。 – Amy21

+0

このようにしてください。 {1:[1,2]、 2:[3,1]、 4:[5,3,1]} – Amy21

関連する問題