2017-02-19 4 views
1

オブジェクトGROUPBY取得それぞれの特定の状態のuser_countで指定します。パンダにおける比率は、私はこのようになりますデータフレームを持って

私は次のことをやってみました:

def f(x): 
    engaged_percent = x['engaged_count'].nunique()/x['user_count'] 
    return pd.Series({'engaged_percent': engaged_percent}) 

by = df3.groupby(['user_state']).apply(f) 
by 

しかし、それは私に次のような結果が得られた:私が欲しいもの

enter image description here

を、このようなものです:

user_state  engaged_percent 
--------------------------------- 
California   2/21 = 0.09 
Florida    2/7 = 0.28 

I私のアプローチが正しいと思うが、なぜ私の結果があなたに表示されるのか分からない第2の写真に見られるようなものである。

ご協力いただければ幸いです。前もって感謝します!

+0

データフレームには重複したレコードがたくさんあります。これは意図的です。また、画像を投稿しないでください?通常のコピー&ペーストを行うだけで、他の人があなたのためにテストしやすくなります。 – Psidom

答えて

2

についてどのように:

user_count=df3.groupby('user_state')['user_count'].mean() 
#(or however you think a value for each state should be calculated) 

engaged_unique=df3.groupby('user_state')['engaged_count'].nunique() 

engaged_pct=engaged_unique/user_count 

(あなたはまた、1つのラインでこれを行うことができます異なる方法の束)

user countシリーズ全体で値を分割していたことを除いて、元のソリューションはほぼ正常でした。だから、あなたは価値の代わりにシリーズを手に入れていました。このわずかなバリエーションを試すことができます:

def f(x): 
    engaged_percent = x['engaged_count'].nunique()/x['user_count'].mean() 
    return engaged_percent 

by = df3.groupby(['user_state']).apply(f) 
by 
1

私はちょうど使用しgroupbyapply直接

df3['engaged_percent'] = df3.groupby('user_state') 
          .apply(lambda s: s.engaged_count.nunique()/s.user_count).values 

デモ

>>> df3 
    engaged_count user_count user_state 
0    3   21 California 
1    3   21 California 
2    3   21 California 
... 
19    4   7  Florida 
20    4   7  Florida 
21    4   7  Florida 

>>> df3['engaged_percent'] = df3.groupby('user_state').apply(lambda s: s.engaged_count.nunique()/s.user_count).values 

>>> df3 
    engaged_count user_count user_state engaged_percent 
0    3   21 California   0.095238 
1    3   21 California   0.095238 
2    3   21 California   0.095238 
... 
19    4   7  Florida   0.285714 
20    4   7  Florida   0.285714 
21    4   7  Florida   0.285714 
関連する問題