2017-06-14 72 views
1

我有下面的代码行:蟒:熊猫GROUPBY&应用优化

df.groupby([col1]).apply(lambda x: x.loc[x[col2] == val, col3].sum()/x.loc[x[col2] == val_0, col3].sum());

df是在大侧(〜30万行)和GROUPBY产生〜2300组的基团。 因此,执行时间是相当大的...

关于如何优化它的任何想法?

谢谢先进!

Python版本:3.6

回答

1

我觉得可以先筛选:

df = pd.DataFrame({'col1':list('aaaabbbb'), 
        'col2':[2,4,6,3,2,4,1,2], 
        'col3':[1,2,1,2,1,2,1,2]}) 
print (df) 
    col1 col2 col3 
0 a  2  1 
1 a  4  2 
2 a  6  1 
3 a  3  2 
4 b  2  1 
5 b  4  2 
6 b  1  1 
7 b  2  2 

val = 4 
val_0 = 2 

a = df[df['col2'] == val] 
b = df[df['col2'] == val_0] 

c = a.groupby('col1')['col3'].sum()/b.groupby('col1')['col3'].sum() 
print (c) 
col1 
a 2.000000 
b 0.666667 
Name: col3, dtype: float64