python:Pandas groupby&应用优化

时间:2017-06-14 12:34:51

标签: python pandas optimization

我有以下代码行:

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

我的df位于较大的一侧(约300000行), groupby 会产生~2300组。 结果,执行时间相当大......

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

先谢谢你了!

Python版本:3.6

1 个答案:

答案 0 :(得分: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