我正在努力根据另一列中的字符串创建两个新列。
我有什么
Profile
0 Technician
1 Service Engineer
2 Sales and Service Support Engineer
我想拥有的东西
First Last
0 Technician NaN
1 Service Engineer
2 Sales Engineer
我的尝试是使用
之类的解决方案new = tl['Profile'].str.split(' ')
tl['First'] = new[0]
tl['Last'] = new[1]
但这仅适用于First。
答案 0 :(得分:2)
在这里尝试str.extract
:
df['Profile'].str.extract(r'^(?P<First>\S+).*?(?P<Last>\S+)?$')
First Last
0 Technician NaN
1 Service Engineer
2 Sales Engineer
没有很多str
方法会如此优雅,因为额外的需要只处理一个单词的句子。
您也可以在此处使用str.partition
。
u = df['Profile'].str.partition()
pd.DataFrame({'First': u[0], 'Last': u[2].str.split().str[-1]})
First Last
0 Technician NaN
1 Service Engineer
2 Sales Engineer
答案 1 :(得分:1)
不使用正则表达式,使用循环
姓氏
k=[]
for i in df_names_test['Name']:
h=len(i.split(" "))
j=i.split(" ")[h-1]
k.append(j)
df_names_test["Last"]=k
名字
k=[]
for i in df_names_test['Name']:
j=i.split(" ")[0]
k.append(j)
df_names_test["First"]=k
使用Lambda函数: 名
df_names_test['First']=df_names_test['Name'].apply(lambda x: x.split(" ")[0])
姓:
df_names_test['Last']=df_names_test['Name'].apply(lambda x: x.split(" ")[-1])