从函数中创建数据框中的多个列

时间:2018-05-10 12:13:50

标签: python pandas

有人可以帮我在这个数据框中创建两个新列吗?

希望解析状态,“s”,然后确保从原始标题字符串中删除状态。结果将包括原始标题,清理标题(没有尾随状态),最后是州名。

df=pd.Series(['Accommodation Payroll Employment in Texas',
          'Accounting, Tax Preparation, Bookkeeping, and Payroll Services    Payroll Employment in Texas']).to_frame()
df.columns=['title']

def state_code(row):
    t=None
    s=None
    if len(row['title'].split(' in '))==2: 
        s=str(row['title'].split(' in ')[1])
        t=str(row['title'].split(' in ')[0])
    elif len(row['title'].split(' in '))==3:
        s=str(row['title'].split(' in ')[2])
        t=str(row['title'].split(' in ')[0]+row['title'].split(' in ')[1])
    elif len(row['title'].split(' for '))==2: 
        s=str(row['title'].split(' for ')[1])
        t=str(row['title'].split(' for ')[0])

    return t,s
df[['title_clean','state']]=df.apply(state_code,axis=1)

1 个答案:

答案 0 :(得分:2)

而不是

return t, s

尝试

return pd.Series(dict(state=s, title_clean=t))

而不是

df[['title_clean','state']]=df.apply(state_code,axis=1)

使用

pd.concat([df, df.apply(state_code,axis=1)], axis=1)

顺便提一下,你的

t = None
s = None

似乎是多余的。