2017-10-07 1 views
1

私はユーザーの取引をパンダのリストに集約したいと思います。私は、複数のフィールドで構成されるリストを作成する方法を理解できません。私はパンダ:groupby列Aと他の列からのタプルのリストを作成しますか?

print(df.groupby('user')['time'].apply(list)) 

をすれば、私は

をすれば、私は

user 
1 [20, 10] 
2 [11, 18] 
3  [15] 

しかしを取得

amount time user 
0 10.99 20  1 
1 4.99 10  1 
2 2.99 11  2 
3 1.99 18  2 
4 10.99 15  3 

のように見えます。例えば、

df = pd.DataFrame({'user':[1,1,2,2,3], 
        'time':[20,10,11,18, 15], 
        'amount':[10.99, 4.99, 2.99, 1.99, 10.99]}) 

私は以下の回答に

user 
1 [time, amount] 
2 [time, amount] 
3 [time, amount] 

おかげで、私は

   amount  time 
user       
1  [10.99, 4.99] [20, 10] 
2  [2.99, 1.99] [11, 18] 
3   [10.99]  [15] 

を取得するには、この

df.groupby('user').agg(lambda x: x.tolist())) 

を行うことができます学んだが、私がしたいつもり取得

df.groupby('user')[['time', 'amount']].apply(list) 

並べ替え時間と金額を同じ順序で並べ替えることができます。

私はこれを製造するための方法を探していました:

   amount-time-tuple 
user       
1  [(20, 10.99), (10, 4.99)] 
2  [(11, 2.99), (18, 1.99)] 
3  [(15, 10.99)] 

多分「tupling」せずに2つの列を並べ替えを行う方法はありますか?

+0

を探していると思います.I値は、あなたの希望のデータセットを投稿することができない、一連の指標を検討しますか? – MaxU

答えて

1

apply(list)あなたは

df.groupby('user')[['time', 'amount']].apply(lambda x: x.values.tolist()) 
 
user 
1 [[23.0, 2.99], [50.0, 1.99]] 
2     [[12.0, 1.99]] 
0

IIUC:

In [101]: df.groupby('user').agg(lambda x: x.tolist()) 
Out[101]: 
      time  amount 
user 
1  [23, 50] [2.99, 1.99] 
2   [12]  [1.99] 
+0

私は質問を更新しました - – MrCartoonology

関連する問題