2016-10-12 49 views
2

pandas数据帧,我有一个姓田的,看起来像在熊猫,设置一个新的列和更新现有列

df = pd.DataFrame(['Jones Jr', 'Smith'], columns=['LastName']) 

我想设置一个名为“一代”的新列,而剥出一代为姓,所以结局是这样的:

df2 = pd.DataFrame([('Jones', 'Jr'), ('Smith', '')], columns=['LastName', 'Generation']) 

我可以设置生成列,然后回去和姓氏去掉代:

df.loc[df['LastName'].str[-3:] == ' Jr', 'Generation'] = 'Jr' 
df.loc[df['LastName'].str[-3:] == ' Jr', 'LastName'] = df['LastName'].str[:-3] 

但是,这是两个步骤,似乎在一次执行更新是最好的。

我想过申请,但它适用于两列匹配X和我找不到任何接近。

回答

3

您可以使用.str.extract()方法:

In [19]: df2 = df.LastName.str.extract(r'(?P<LastName>\w+)\s?(?P<Generation>Jr|Sr)?', expand=True) 

In [20]: df2 
Out[20]: 
    LastName Generation 
0 Jones   Jr 
1 Smith  NaN 
+1

可以命名列,以及,如'df.LastName.str.extract(r“(?P \ w +)\ s?(?P Jr | Sr?)”,expand = True)' –

+0

@MichaelGriffiths,谢谢,我已经更新了我的答案因此... – MaxU