Python 从函数在dataframe中创建多个列

Python 从函数在dataframe中创建多个列,python,pandas,Python,Pandas,有人能帮我在这个数据框中创建两个新列吗 我们希望将状态解析为“s”,然后确保状态从原始标题字符串中删除。结果将包括原始标题、已清理的标题(不带尾随状态)以及最终的状态名称 df=pd.Series(['Accommodation Payroll Employment in Texas', 'Accounting, Tax Preparation, Bookkeeping, and Payroll Services Payroll Employment in Texas'

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

我们希望将状态解析为“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)
而不是

return t, s
试一试

而不是

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


顺便说一句,你的

t = None
s = None

似乎多余。

像个魅力。。。想到今天早上我花了多少时间试图弄明白这一点,真令人沮丧。。。非常感谢!
pd.concat([df, df.apply(state_code,axis=1)], axis=1)
t = None
s = None