2017-03-14 41 views
1

如何翻譯由大熊貓的SQL:多聚集白衣情況下,當組由熊貓數據幀

select count(case new=='A' then 1 else 0 end)/count(*) as score1 
     ,sum(s*s2) as score2 
    from table 
group by u1; 

數據幀是這樣的:

df = pd.DataFrame({'s':[5,2,1,3], 
       's2':[1,2,1,2], 
       'new':list('ABAB'), 
       'u1':list('WWYY'), 
       'u2':list('abab')}) 

    new s s2 u1 u2 
0 A 5 1 W a 
1 B 2 2 W b 
2 A 1 1 Y a 
3 B 3 2 Y b 

最後的結果是這樣的:

​​
+0

我不明白'score2',你能解釋一下嗎? – jezrael

回答

1

看來你需要aggregate,但是首先要創建新列:

#convert boolean mask to int 
df['score1'] = (df.new == 'A').astype(int) 
#multiple s and s2 columns 
df['score2'] = df.s.mul(df.s2) 
print (df) 
    new s s2 u1 u2 score1 score2 
0 A 5 1 W a  1  5 
1 B 2 2 W b  0  4 
2 A 1 1 Y a  1  1 
3 B 3 2 Y b  0  6 

df = df.groupby('u1').agg({'score1':'mean', 'score2':'sum'}) 
print (df) 
    score1 score2 
u1     
W  0.5  9 
Y  0.5  7 
+0

哦,我明白了。我應該做一些預處理,然後做簡單的意思或總結!非常感謝! –

+0

謝謝你接受,所以'score2'是正確的? – jezrael

+0

score2是正確的!我之前寫的結果是在我的腦海裏計數,並且我得到了一個錯誤的答案...... –