2017-03-14 40 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是正确的!我之前写的结果是在我的脑海里计数,并且我得到了一个错误的答案...... –