2017-07-07 12 views
0

を取る:行のパンダは合計で変換私は整数値の次の列を持っているパンダのデータフレームを持っているが長すぎる

user_id, user_agent_id, appearances 

数は異なりますが、彼らは410万以上です。私は、各ユーザーのすべての出現の合計である新しい行の出現を作成したいと考えています。だから私は、次の手順を実行します

私は

dataframe['percent'] = dataframe['appearances']/dataframe['total_appearances'] 

あるユーザーごとuser_agent_idのあたりの割合を計算したいので、私はパーセント

の最大値を計算するために同じことを行うことを必要とする
dataframe['total_appearances'] = dataframe['appearances'].groupby(dataframe['user_id']).transform('sum') 

dataframe['max_percent'] = dataframe['percent'].groupby(dataframe['user_id']).transform('max') 

など

事があるのに対し変換方法のトンのmax方法aks約5mの合計メソッドは2秒以上の時間がかかります。これは自然ですか? total_appearancesの情報を入手するためのより迅速な方法はありますか?

答えて

0

私が正しく質問を理解していた場合、あなたはこのような何かを持つ1つのステップに最初の2行を統合することができます:

# sample data 
df 
    appearances user_id 
0   6  abc 
1   3  abc 
2   5  abc 
3   8  def 
4   4  gfd 
5   2  uio 
6   1  def 
7   8  poi 
8   3  fab 

df['percent'] = df.groupby('user_id').appearances.apply(lambda x: x.div(np.sum(x))) 

df 
    appearances user_id percent 
0   6  abc 0.428571 
1   3  abc 0.214286 
2   5  abc 0.357143 
3   8  def 0.888889 
4   4  gfd 1.000000 
5   2  uio 1.000000 
6   1  def 0.111111 
7   8  poi 1.000000 
8   3  fab 1.000000 

あなたはこれらの変更によるパフォーマンスの向上を参照していますか?

+0

'a'メソッドとは何ですか?列名が残念です。また、私は列の名前にparanthesisを使用してこの構文を見たことがない。 – Apostolos

+0

私はパーセンテージの計算に問題はありませんが、出現総数の列はありません。変換は問題です:)。しかし、私は確認し、あなたに戻ってくる – Apostolos

+0

括弧上の名前が予想されるエラー。たぶんあなたはメソッドの呼び出しを見逃していますか? – Apostolos

関連する問題