【问题标题】:Apply function over rows in pandas df在 pandas df 中的行上应用函数
【发布时间】:2018-05-01 08:07:46
【问题描述】:

在 pandas df 中,我有一个列 ['name'],其中包含各种操作系统分类,例如 'Windows 7', 'Windows 10', 'Linux', 'Mobile iOS 9.1', 'OS X 10.12' 等。这是字符串。

我希望使用这个函数来创建一个新的列['type'],这将是一个更通用的版本:

def name_group(row):
    if 'Windows' in row:
        name = 'Microsoft Windows'
    elif 'iOS' in row:
        name = 'Apple iOS'
    elif 'OS X' in row:
        name ='Apple Macintosh'
    elif 'Macintosh' in row:
        name = 'Apple Macintosh'
    elif 'Linux' in row:
        name = 'GNU/Linux'
    else:
        name = 'Other'
    return name

当我通过传入单个字符串变量来测试函数时,它可以正常工作,但是由于某种原因,当我像这样将函数应用于 df 时,它只为每一行返回“其他”。

new_df['type'] = new_df.apply(name_group, axis=1)

对可能导致这种情况的任何想法?

【问题讨论】:

    标签: python function pandas


    【解决方案1】:

    您需要通过nameSeries.apply 传递列:

    new_df['type'] = new_df['name'].apply(name_group)
    

    但如果要使用DataFrame.apply,则还需要lambda 函数并传递列名:

    new_df['type'] = new_df.apply(lambda x: name_group(x['name']), axis=1)
    

    【讨论】:

    • 谢谢!那效果很好。唯一的修改是我需要将函数末尾的“返回名称”更改为“返回 str(name)”
    • 不客气!如果我的回答有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记 () 将其从灰色切换为已填充。谢谢。
    猜你喜欢
    • 2020-09-19
    • 2016-07-27
    • 1970-01-01
    • 2017-02-24
    • 2018-10-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多