実現したいこと
ゲームのユーザーのプレイログのデータをpythonで処理しています。
ゲームからプレイデータは以下のような形式で出力されます。
ユーザーID,操作順,得点
aaaa,0,10
aaaa,1,2
aaaa,2,100
・
・
・
aaaa,13,20
bbbb,0,5
・
・
・
zzzz,13,40
プレイログの情報から得点の統計情報を取得するために、
各ユーザーIDを持つ列を作成して、操作順に得点を格納することを考えています。
発生している問題・分からないこと
以下のソースコードで実装することができましたが、ユーザーIDが30000を超えると
処理時間が長時間に及びます。
こちらの処理を高速化する方法についてご教示いただけますと幸いです。
該当のソースコード
python
1def point_mean(gamedf): 2 poinitdata=[] 3 resultdf = pd.DataFrame() 4 useriddf=gamedf.drop_duplicates('user_id') 5 useridlist=useriddf['user_id'].values.tolist() 6 for userid in useridlist: 7 poinitdata.append(gamedf.query('user_id==@userid')['point'].values.tolist()) 8 tmp=pd.DataFrame(poinitdata,index=useridlist) 9 resultdf=pd.concat([resultdf,tmp.T],axis=1) 10 result.dropna(axis=1,inplace=True)
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
pythonではfor文が遅いということはわかりましたが、改善策はわかりませんでした。
補足
特になし