我有以下代码:
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
发布于 2017-06-14 12:51:04
我想你可以先过滤:
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: float64https://stackoverflow.com/questions/44544967
复制相似问题