2016-11-08 3 views
4

カウント:パンダグループ化し、パンダのデータフレームDFが3列あり

のuser_id、 セッション、私が今やりたいことは、グループDFは独特のuser_idであり、2つの新しい列を派生

収入 - 1を(特定のuser_idに関連付けられたセッションの数をカウントする)と、number_transactions(収益の列の下にある各user_idの値が0以上の行の数をカウントします)を呼び出します。これをどうやって行うのですか?

私はこのような何かをやってみました:

df.groupby('user_id')['session', 'revenue'].agg({'number sessions': lambda x: len(x.session), 
'number_transactions': lambda x: len(x[x.revenue>0])}) 
+0

何の疑問や問題文の –

答えて

4

私はあなたが使用することができると思う:

df = pd.DataFrame({'user_id':['a','a','s','s','s'], 
        'session':[4,5,4,5,5], 
        'revenue':[-1,0,1,2,1]}) 

print (df) 
    revenue session user_id 
0  -1  4  a 
1  0  5  a 
2  1  4  s 
3  2  5  s 
4  1  5  s 

a = df.groupby('user_id') \ 
     .agg({'session': len, 'revenue': lambda x: len(x[x>0])}) \ 
     .rename(columns={'session':'number sessions','revenue':'number_transactions'}) 
print (a) 
     number sessions number_transactions 
user_id          
a      2     0 
s      3     3 

a = df.groupby('user_id') \ 
     .agg({'session':{'number sessions': len}, 
      'revenue':{'number_transactions': lambda x: len(x[x>0])}}) 
a.columns = a.columns.droplevel() 

print (a) 
     number sessions number_transactions 
user_id          
a      2     0 
s      3     3 
+0

本当にありがとうございましたはありません!これはまさに私が必要とした解決策です。乾杯! –

1

が、私は同じカウントsessionためnuniqueを倍増しないように使用したいです特定のユーザーのセッション

funcs = dict(session={'number sesssions': 'nunique'}, 
      revenue={'number transactions': lambda x: x.gt(0).sum()}) 
df.groupby('user_id').agg(funcs) 

enter image description here

セットアップ

df = pd.DataFrame({'user_id':['a','a','s','s','s'], 
        'session':[4,5,4,5,5], 
        'revenue':[-1,0,1,2,1]}) 
関連する問題