我有以下代码行:
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
答案 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