在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和我无法找到任何接近的列。
答案 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