假设以下 pandas 数据框:
A
1
1
2
4
10
以及以下函数:
def sum(A):
return 2 + A
我将 sum 函数应用于 pandas 数据框,如下所示:
df['sum'] = df['A'].apply(sum)
如何返回另一列中的函数名称?例如,预期输出如下所示:
A sum func_name
1 3 sum
1 3 sum
2 4 sum
4 6 sum
10 12 sum
原因是我想跟踪每个值所应用的内容。
最佳答案
如果您想获取函数名称,另一个选择是使用f.__name__
。示例:
def mysum(X):
return 2 + X
def foo(X, function):
return pd.Series({
function.__name__: function(X), 'func_name': function.__name__})
df.join(df.A.apply(foo, function=mysum))
A mysum func_name
0 1 3 mysum
1 1 3 mysum
2 2 4 mysum
3 4 6 mysum
4 10 12 mysum
def myprod(X):
return 2 * X
df.join(df.A.apply(foo, function=myprod))
A myprod func_name
0 1 2 myprod
1 1 2 myprod
2 2 4 myprod
3 4 8 myprod
4 10 20 myprod
我假设您已经熟悉以这种方式使用 apply
的陷阱。我写这篇文章的假设是你的函数是更复杂的东西的替代品。但一般来说,您应该尽可能尝试矢量化。
如果您想要更灵活地命名输出列,您可以添加关键字参数name
:
def foo(X, function, name=None):
name = name if name else function.__name__
return pd.Series({
name: function(X), 'func_name': function.__name__})
df.join(df.A.apply(foo, function=mysum, name='sum'))
A sum func_name
0 1 3 mysum
1 1 3 mysum
2 2 4 mysum
3 4 6 mysum
4 10 12 mysum
关于python - 使用 pandas apply() 时如何返回列中函数的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53837580/