向量化/并行化 DataFrame 索引

数据挖掘 Python 熊猫 表现
2022-02-28 06:34:41

我想通过替换 for 循环使以下 Python 数据处理代码更高效。有没有办法对这样的代码进行矢量化?

  1. 我有一个df看起来有点像的 DataFrame 对象:

    names number
    bob 5
    sara 10
    bob 8
    foo 12
    moo 16
    
  2. 我想对 DataFrame 进行子集化以找出与每个名称关联的所有行,然后对number. 这就是我现在正在做的事情:

    for myName in set(df['names']):    
        nameSubset = df.loc[df['names']==myName]    
        operation(nameSubset['number'], **args) 
    
    '''Basically,perform an operation on the `number` column of nameSubset.'''
    

有没有办法让这段代码运行得更快?从理论上讲,如果计算机可以在任何给定时刻处理多个 myName,而不是一次运行每个 myName,那么这可以更快。我不确定如何矢量化/并行化我的代码以实现这一点。

1个回答

那是你要的吗?

In [261]: df
Out[261]:
  names  number
0   bob       5
1  sara      10
2   bob       8
3   foo      12
4   moo      16

In [262]: def my_op(ser):
     ...:     return ser.sum()
     ...:

In [263]: df.groupby('names').agg({'number':my_op})
Out[263]:
       number
names
bob        13
foo        12
moo        16
sara       10