我有一个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?
答案 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