2016-11-08 157 views
4

一個熊貓數據幀DF有3列:熊貓集團通過和Count

USER_ID, 會議, 收入

我想現在要做的就是DF組由獨特的USER_ID並從中獲得2個新欄目 - 一個稱爲number_sessions(統計與特定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

我會使用nuniquesession不重複計算相同針對特定用戶的會話

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]})