python - 如何将多个函数应用于单个 pandas 数据框列?

标签 python python-3.x pandas map-function

我很好奇是否可以将多个函数应用于单个 pandas 数据框列。例如,假设我有三个函数:

在:

def foo(col):
    if 'hi' in col:
        return 'TRUE'

def bar(col):
    if 'bye' in col:
        return 'TRUE'

def baz(col):
    if 'ok' in col:
        return 'TRUE'

以及以下数据框:

dfs = pd.DataFrame({'col':['The quick hi brown fox hi jumps over the lazy dog', 
                           'The quick hi brown fox bye jumps over the lazy dog', 
                           'The NO quick brown fox ok jumps bye over the lazy dog']})

如果我想将每个函数应用到 col,通常我会使用 pandas apply功能:

dfs['new_col1'] = dfs['col'].apply(foo)

dfs['new_col2'] = dfs['col'].apply(bar)

dfs['new_col3'] = dfs['col'].apply(baz)

dfs

输出:

    col     new_col1    new_col2    new_col3
0   The quick hi brown fox hi jumps over the lazy dog   TRUE    None    None
1   The quick hi brown fox bye jumps over the lazy...   TRUE    TRUE    None
2   The NO quick brown fox ok jumps bye over the l...   None    TRUE    TRUE

但是,如您所见,我创建了 3 列。因此,我的问题是如何在大型数据帧中将上述 3 个函数同时有效地应用于特定列?,预期结果应该是:

    col                                                 new_col
0   The quick hi brown fox hi jumps over the lazy dog   TRUE
1   The quick hi brown fox bye jumps over the lazy...   TRUE, TRUE
2   The NO quick brown fox ok jumps bye over the l...   TRUE, TRUE

请注意,我知道我可以将 3 列合并为一列。不过,我想知道上述问题是否可能。

最佳答案

为什么不将所有功能集中到一个巨大的功能中呢?

def oneGaintFunc(col):    
    def foo(col):
        if 'hi' in col:
            return 'TRUE'

    def bar(col):
        if 'bye' in col:
            return 'TRUE'

    def baz(col):
        if 'ok' in col:
            return 'TRUE'

    a = foo(col)
    b = bar(col)
    c = baz(col)
    return '{} {} {}'.format(a, b, c)

df['new_col'] = df['col'].apply(oneGiantFunc)

关于python - 如何将多个函数应用于单个 pandas 数据框列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42369953/

相关文章:

python - 类型错误 : 'str' object is not an iterator when concatenating csv files

python - 评估每个单元格并返回列头,如果不是 null pandas df

c++ - NumPy 的 C++ : How to iterate over PyArrayObject without a segfault

python - Python 3.2 是否有 PyMongo 的等价物?

python - 是否有 pandas/numpy 函数可以将整数分布到后续的零中?

python - 需要帮助格式化使用 openpyxl 创建的图表中的文本

python-3.x - Cython 编译器指令 language_level 不受尊重

python - 使用 pandas 写入 CSV 时删除 "unnamed: #"

Python 重新采样 - Pad 未填充 NAN

python - 在 Visual Studio Code 中使用 Anaconda