我是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")]
由于我的数据集非常大,因此我决定切换到大熊猫,但我不知道如何获得相同的结果。 干杯
答案 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