替换另一列的特定实例的一列中的值

时间:2016-07-19 14:09:39

标签: python string pandas str-replace

我是Pandas的新手,不知道如何做到以下几点:

我有一个包含多个列的数据框(df)。一列叫做

OldCat = ['a-nn', 'bb-nm', 'ab-pp', 'ba-nn', 'cc-nm', 'ca-mn']

现在我想创建一个新列,以新方式组织/分类OldCat(NewCat)。具体来说,我想在OldCat中查找包含a(开头),ba或ca的字符串 J = '^ A | BA | CA' 然后将OldCat中的nan替换为OldCat包含j的行中的'A'。 在R中,这将是这样的:

 j='^a|ba|ca'
 df[(OldCat %like% j),NewCat := str_replace_all(df[(OldCat %like% j),NewCat], "nan", "A")]

由于我的数据集非常大,因此我决定切换到大熊猫,但我不知道如何获得相同的结果。 干杯

1 个答案:

答案 0 :(得分:2)

您可以使用向量化的str.extract返回与fillna的匹配项,将NaN替换为字符串'nan'

In [119]:
df['NewCat'] = df['OldCat'].str.extract('(^a|ba|ca)', expand=False).fillna('nan')
df

Out[119]:
  OldCat NewCat
0      a      a
1     bb    nan
2     ab      a
3     ba     ba
4     cc    nan
5     ca     ca

修改

IIUC然后您可以str.contains使用loc来设置包含字符串的行:

In [137]:
df.loc[df['OldCat'].str.contains(r'a|ba|ca'), 'NewCat'] = 'A'
df['NewCat'].fillna('nan', inplace=True)
df

Out[137]:
  OldCat NewCat
0   a-nn      A
1  bb-nm    nan
2  ab-pp      A
3  ba-nn      A
4  cc-nm    nan
5  ca-mn      A