【问题标题】:How to iterate over rows effectively in pandas data-frame using python如何使用 python 在 pandas 数据框中有效地迭代行
【发布时间】:2020-09-27 08:43:32
【问题描述】:

我有一个看起来像这样的数据框:

A         B       C
13.06   12.95   -0.11
92.56   104.63  12.07
116.49  219.27  102.78
272.11  487.26  215.15
300.11  780.75  480.64

大约有 100 万条记录。

我想创建一个 D 列,计算如下:

D 列的第一个值为 0,然后:

Col D3= =(D2+1)*C3/B3

Col D4= =(D3+1)*C4/B4

D 列的现值取决于先前的值。

结果如下:

D
0
0.115358884
0.52281017
0.672397915
1.02955022

我可以使用for loop and loc 解决它,但它需要很多时间。我可以用更有效的pythonic方式解决它吗?

【问题讨论】:

    标签: python-3.x pandas dataframe iteration


    【解决方案1】:

    递归计算不可矢量化,用于提高性能numba

    from numba import jit
    
    @jit(nopython=True)
    def f(a, b, c):
        d = np.empty(a.shape)
        d[0] = 0
        for i in range(1, a.shape[0]):
            d[i] = (d[i-1] + 1) * c[i] / b[i]
        return d
    
    df['D'] = f(df['A'].to_numpy(), df['B'].to_numpy(), df['C'].to_numpy())
    print (df)
            A       B       C         D
    0   13.06   12.95   -0.11  0.000000
    1   92.56  104.63   12.07  0.115359
    2  116.49  219.27  102.78  0.522810
    3  272.11  487.26  215.15  0.672398
    4  300.11  780.75  480.64  1.029550
    

    【讨论】:

    • Giving error : TypingError: Failed in nopython mode pipeline (step: nopython frontend) non-precise type array(pyobject, 1d, C) [1] 期间:在 (3) 文件“”,第 3 行:def calc(a,b,c): d = np.empty(a.shape) ^
    • @MAC - 列是否由数字填充?
    • df = {'HW':['13.06', '92.56', '116.49', '272.11','300.11'], 'IBC':[12.95, 104.63, 219.27, 487.26, 780.75],'jik':[-0.11, 12.07, 102.78, 215.15,480.64]} df = pd.DataFrame(df)
    • @MAC - 确切地说,问题是HW 由字符串填充,而不是数字。需要转换成数字,查看this
    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2015-08-28
    相关资源
    最近更新 更多