将一列中的值替换为另一列的特定实例
Replace values in one column for specific instances of another column
我是 Pandas 的新手,不确定如何执行以下操作:
我有一个包含多个列的数据框 (df)。一列称为
OldCat = ['a-nn', 'bb-nm', 'ab-pp', 'ba-nn', 'cc-nm', 'ca-mn']
现在我想创建一个新列 organizes/categories OldCat 以新的方式 (NewCat)。具体来说,我想在 OldCat 中查找包含 a(开头)、ba 或 ca 的字符串
j='^a|ba|ca'
然后在 OldCat 包含 j 的行中将 NewCat 中的 nan 替换为 'A'。
在 R 中,这将是这样的:
j='^a|ba|ca'
df[(OldCat %like% j),NewCat := str_replace_all(df[(OldCat %like% j),NewCat], "nan", "A")]
由于 R 对于我非常大的数据集来说相对较慢,我决定切换到 pandas 但我不确定如何获得相同的结果。
干杯
您可以使用矢量化 str.extract
到 return 与 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
我是 Pandas 的新手,不确定如何执行以下操作:
我有一个包含多个列的数据框 (df)。一列称为
OldCat = ['a-nn', 'bb-nm', 'ab-pp', 'ba-nn', 'cc-nm', 'ca-mn']
现在我想创建一个新列 organizes/categories OldCat 以新的方式 (NewCat)。具体来说,我想在 OldCat 中查找包含 a(开头)、ba 或 ca 的字符串 j='^a|ba|ca' 然后在 OldCat 包含 j 的行中将 NewCat 中的 nan 替换为 'A'。 在 R 中,这将是这样的:
j='^a|ba|ca'
df[(OldCat %like% j),NewCat := str_replace_all(df[(OldCat %like% j),NewCat], "nan", "A")]
由于 R 对于我非常大的数据集来说相对较慢,我决定切换到 pandas 但我不确定如何获得相同的结果。 干杯
您可以使用矢量化 str.extract
到 return 与 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