python - 使用 pandas apply() 时如何返回列中函数的名称?

标签 python python-3.x pandas

假设以下 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/

相关文章:

python - 作为Python初学者,我应该如何使用安装目录?

列表和子列表的Python算法

python - 如何使用 Python 从网站下载所有 Zip 文件

python - 打印 csv 列中最旧和最新的日期 - 按日期对 csv 进行排序

python - pandas.DataFrame 中的 NaN 不打印到 Excel

python - 识别 Pandas 中两个重叠列的不同映射

python - 它是如何工作的,Django INSTALLED_APPS 的命名约定?

python - Django 缺少 1 个必需的位置参数

python - 为什么在 Python 3 中将字节与 str 进行比较失败?

python - 为什么 Pandas 数据帧 to_dict ("records") 与另一个简单的实现相比性能很差?