python:Pandas groupby 和应用优化

标签 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

最佳答案

我认为你可以先过滤:

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

关于python:Pandas groupby 和应用优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44544967/

相关文章:

python - 如何 pickle 自己?

python - 格式化 Pandas 数据框中整数的千位分隔符

python - 从没有 to_dict 的 Pandas df 生成字典的最快方法

python - Django 休息 : Uploading and serializing multiple images

python - 使用参数在 Python 中执行 Fortran 子进程

python - Pandas => 按组获取第一个和最后一个元素的索引

c - 在嵌入式 MCU 应用程序中,在 for 循环中使用 uint_fast16_t 还是 size_t 更好?

html - 省略关闭正文和 html 标签的好处?

c++ - 数组中两个数之和的最小差值

python - Raspberry Pi & Python 2.7 - 尝试打印给所有用户