如何将自定义函数应用于熊猫数据框的两列?

时间:2019-10-14 11:59:42

标签: python-3.x pandas dataframe

我有一个2列的熊猫数据框,比如A和B。
A和B列的所有元素均为字符串类型。
例如

        A      B  
0      str1   str2  
1      str3   str4  
2      str5   str6  
3      str7   str8  

所以,我有一个函数f,它将2个字符串作为输入,执行一些无关紧要的事情并返回输出。
例如def f(x, y): "do something to x and y to make z" return z
我希望输出看起来像是

        A      B      C
0      str1   str2  f(str1, str2)
1      str3   str4  f(str3, str4)
2      str5   str6  f(str5, str6)
3      str7   str8  f(str7, str8)

我不想使用循环,因为它是一个很大的数据框。
如何以向量化的方式将函数f应用于列A和列B?

2 个答案:

答案 0 :(得分:2)

  

如何以向量化的方式将函数f应用于列A和列B?

可以通过以下方式实现:

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

但它不是向量化的,它是引擎盖下的循环。

显然,对于矢量化解决方案来说,必须更改函数以使用数组,而不是标量,而对于字符串来说这并不平凡。另一个想法是使用cython or numba

答案 1 :(得分:0)

您可以将列作为参数传递给函数,但这取决于您拥有的函数。例如:

df['C'] = np.add(df['A'], df['B'])

结果:

      A     B         C
0  str1  str2  str1str2
1  str3  str4  str3str4
2  str5  str6  str5str6
3  str7  str8  str7str8