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

2024-09-28 16:18:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在熊猫中,我知道一个函数可以应用如下:

 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

Tags: 函数falsetruedf参数returndefapply
3条回答

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
df['ColF'] =  df.apply(lambda x: a_sum(x['ColA'], x['ColB']), axis=1)
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

相关问题 更多 >