Если вы хотите получить имя функции, другой вариант использует 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