如何遍历两个熊猫列并创建一个新列

时间:2020-04-16 18:13:20

标签: python pandas loops

我正在尝试通过在一定条件下串联两个列来创建新列。

master['work_action'] = np.nan
for a,b in zip(master['repair_location'],master['work_service']):
    if a == 'Field':
        master['work_action'].append(a + " " + b)
    elif a == 'Depot':
        master['work_action'].append(a + " " + b)
    else:
        master['work_action'].append(a)

TypeError: cannot concatenate object of type '<class 'str'>'; only Series and DataFrame objs are valid

问题出在master['work_action'].append(a + " " + b)

如果我将代码更改为此:

test = []
for a,b in zip(master['repair_location'],master['work_service']):
    if a == 'Field':
        test.append(a + " " + b)
    elif a == 'Depot':
        test.append(a + " " + b)
    else:
        test.append(a)

我在列表中得到了我想要的。但我想在熊猫专栏中找到它。如何使用上述条件创建一个新的pandas列?

2 个答案:

答案 0 :(得分:2)

如果性能很重要,我会使用numpy的{​​{1}}:

select

这将导致:

master = pd.DataFrame(
    {
        'repair_location': ['Field', 'Depot', 'Other'],
        'work_service':[1, 2, 3]
    }
)

master['work_action'] = np.select(
    condlist= [
        master['repair_location'] == 'Field',
        master['repair_location'] == 'Depot'
    ],
    choicelist= [
        master['repair_location'] + ' ' + master['work_service'].astype(str),
        master['repair_location'] + ' ' + master['work_service'].astype(str)
    ],
    default= master['repair_location']
)

答案 1 :(得分:-1)

Append方法用于最后插入值。您正在尝试连接两个字符串值。使用apply方法:

def fun(a,b):
    if a == 'Field':
        return a + " " + b
    elif a == 'Depot':
        return a + " " + b
    else:
       return a

master['work_action'] = master.apply(lambda x: fun(x['repair_location'], x['work_service']), axis=1)