在pandas中,设置新列并更新现有列

时间:2016-10-12 22:44:56

标签: python pandas dataframe

pandas数据框中,我有一个看起来像

的姓氏字段
df = pd.DataFrame(['Jones Jr', 'Smith'], columns=['LastName'])

我正在尝试设置一个名为' Generation'的新列,同时删除代号的生成,因此结果将如下所示:

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

我可以设置Generation列然后返回并从姓氏中删除Generation:

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

然而,这是两个步骤,似乎一举完成更新将是最好的。

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

1 个答案:

答案 0 :(得分: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