首页 > 解决方案 > 将函数应用于数据框

问题描述

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

                Y        E
1312  2.098650e-10  4.05909
1313  9.294030e-10  4.11673
1314  5.596410e-10  4.18051
1315  7.395250e-10  4.18648
1316  3.997430e-10  4.20233

我想将函数应用于 Y 列和 E 列中的值到新列“func_d”。

def func(typ, Y, E):
    if typ=='d':
        return E/Y
    else:
        return E*Y

def func_d(Y,E):
    return func('d', Y, E)

我明白了

TypeError: ("'Series' object is not callable", '发生在索引 1312')

当我这样做时:

df['func_d'] = df.apply(func_d(df['Y'],df['E']), axis=1)

我没有func_d正确传递变量吗?

标签: pythondataframeapply

解决方案


什么是“典型”?你想以此作为论据吗?理想情况下,该函数应将行或列作为参数。所以,这样的事情可能会起作用:

def func_d(row, typ='d'):
    E = row['E']
    Y = row['Y']
    if typ == 'd':
        return E/Y
    else:
        return E*Y

df['func_d'] = df.apply(lambda row:func_d(row,'d'), axis = 1)

如果没有 lambda 函数,它将是

df['func_d'] = df.apply(func_d, axis = 1, args = ("d"))

推荐阅读