如何应用一个接收两个参数作为pandas列的函数?

时间:2017-08-02 19:04:20

标签: python python-3.x pandas

在pandas中,我知道可以按如下方式应用函数:

 df.apply(f, axis=1)

但是,我有一个接收两个参数的函数,例如让我们说:

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

如何通过将ColAColB的元素作为参数来应用上述函数:

ColA ColB ColC ColD
1    2    True False
1    1    True False
1    4    True False
...
1    10    True False

为了生成这个新列ColF

ColA ColB ColC ColD   ColF
1    2    True False   3
1    1    True False   2
1    4    True False   5
...
1    10    True False  11

4 个答案:

答案 0 :(得分:4)

from itertools import starmap

df.assign(F=list(starmap(a_sum, df[['ColA', 'ColB']].values)))

   ColA  ColB  ColC   ColD   F
0     1     2  True  False   3
1     1     1  True  False   2
2     1     4  True  False   5
3     1    10  True  False  11

<强>时序
使用大数据

df = pd.concat([df] * 1000, ignore_index=True)

%timeit df.assign(F=list(starmap(a_sum, df[['ColA', 'ColB']].values)))
%timeit df.assign(F=df.apply(lambda row: a_sum(row.ColA, row.ColB), axis=1))

100 loops, best of 3: 5.01 ms per loop
10 loops, best of 3: 90.7 ms per loop

答案 1 :(得分:2)

当使用apply方法与axis=1一起使用时,你也将一个也是系列的行传递给函数,要在这里应用自定义f,你可以用lambda函数包装它获取行,然后将ColAColB作为参数传递给f

df.apply(lambda row: f(row.ColA, row.ColB), axis=1)
df['ColE'] = df.apply(lambda row: a_sum(row.ColA, row.ColB), axis=1)
df
#ColA   ColB    ColC    ColD    ColE
#0  1      2    True    False   3
#1  1      1    True    False   2
#2  1      4    True    False   5
#3  1     10    True    False   11

答案 2 :(得分:2)

df['ColF'] =  df.apply(lambda x: a_sum(x['ColA'], x['ColB']), axis=1)

答案 3 :(得分:1)

还可以使用

df['ColF'] = [a+b for a,b in zip(df['ColA'],df['ColB'])]

或者如果您的真实功能更加自定义

df['ColF'] = [a_sum(a,b) for a,b in zip(df['ColA'],df['ColB'])]