我已经检查了map、apply、mapapply和合并,但似乎找不到一种简单的方法来执行以下操作:
我有一个有10列的数组,我需要把其中的三列传递给一个接受标量并返回标量的函数。
some_func(int a, int b, int c) returns int d
字符串
我想应用这个方法,并使用结果在嵌套框架中创建一个新列。
df['d'] = some_func(a = df['a'], b = df['b'], c = df['c'])
型
我找到的所有解决方案似乎都建议重写some_func来处理Series而不是scalar,但这是不可能的,因为它是另一个包的一部分。
7条答案
按热度按时间b4qexyjb1#
使用
pd.DataFrame.apply()
,如下所示:字符串
注意事项:由于@ashishsingal询问列,
axis
参数应该提供值1,因为默认值为0(如documentation和下面复制的)。轴:{0或“index”,1或“columns”},默认值为0
hzbexzde2#
对于这样一个老问题,我发现将函数参数压缩成元组,然后将函数作为列表解析应用要比使用
df.apply
快得多。例如:字符串
222 ms ± 63.8 ms/循环(7次运行的平均值±标准差,每次1个循环)
型
8.07 ms ± 640 µs/循环(7次运行的平均值±标准差,每次100个循环)
6jygbczu3#
我使用的map和列表理解一样快(比apply快得多):
字符串
在我的机器上:
型
130 ms ± 1.11 ms/循环(7次运行的平均值±标准差,每次10个循环)
型
3.91 ms ± 22.9 µs/循环(7次运行的平均值±标准差,每次100个循环)
nbnkbykc4#
我正在使用以下内容:
字符串
似乎工作得很好,但如果其他人有更好的解决方案,请让我知道。
vc9ivgsu5#
非常好的使用列表理解的技巧,比如推荐的 Toby Petty
字符串
这可以通过移除元组示例化来进一步优化
型
Map多个列的一种更快的方法是使用numpy中的frompyfunc创建python函数的矢量化版本
型
pdtvr36n6#
如果它是一个非常简单的函数,比如一个基于简单算术的函数,那么它很有可能被向量化。例如,可以直接从列中进行线性组合:
字符串
其中w1、w2、w3是标量权重。
jchrr9hc7#
您还可以
字符串
我认为它比
df.apply
快得多。