【问题标题】:Pass entire row to a function in numpy vectorize in Python?将整行传递给 Python 中 numpy vectorize 中的函数?
【发布时间】:2021-05-02 21:15:25
【问题描述】:

我以前没有使用过 numpy 矢量化。这是我正在工作的一个小例子。

import numpy as np
import pandas as pd

def my_func(x, y):
    return x+y

>>> df = pd.DataFrame({'A': np.random.randint(1, 100, 3), 'B': np.random.randint(1, 100, 3)})
>>> df
    A   B
0  97  58
1  78  64
2  53  25

我的问题是在处理大型数据集时,是否有更好的方法将列传递给我的 user_func 而不是传递多个列?有没有办法通过整行?

>>> df['result'] = np.vectorize(divide)(df['A'], df['B'])
>>> df
    A   B    result
0  97  58  1.672414
1  78  64  1.218750
2  53  25  2.120000

【问题讨论】:

  • 我没有得到关于 np.vectorize 的炒作。这只是一个美化的 for 循环。为什么不df['C'] = df['A']/df['B']
  • @QuangHoang 如前所述,我正在处理一个巨大的数据框,我的功能并不像添加两列那么简单。这里只展示了一个小样本。
  • 我认为你要求人们重新设计你的函数而不知道它的作用或外观是不公平的。也就是说,对于最一般的情况,您可以按照下面的回答执行apply

标签: python pandas numpy vectorization


【解决方案1】:

您可以使用apply 通过axis = 1 逐行管理函数。

df['results'] = df.apply(lambda x: my_funct(x['A'],x['B']), axis = 1)

my_funct(row):
   return row['x'] + row['y']

df['results'] = df.apply(my_funct, axis = 1)

不过,我希望通过列会更快。如果内存存在问题,使用 Dask 也可能会在更大的数据集中为您提供支持。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多