熊猫:如果另一列的字符串以 ("A"、"B"、"C" 开头,则用 (1,2,3) 列



我有带有文件名和分类的数据帧,这些是来自网络的预测,我想将它们映射为整数,以评估网络的预测。

我的数据帧是:

Filename:             Class:

GHT347                  Europe
GHT568                  lONDON
GHT78                   Europe
HJU                      US
HJI                      lONDON
HJK                      US
KLO                      Europe
KLU                      lONDON
KLP                      lONDON
KLY1                    lONDON
KL34                    US

真正的预测应该是:

GHT——欧洲HJU--我们KL——伦敦

我想通过添加额外的两列预测和实际来映射:GHT和欧洲到1,美国和HJ到0,KL和伦敦到2

Actual Prediction
1           1
1           2

pandas str.startswith方法返回true或false,这里我需要三个值。有人能给我指路吗?

我不能完全理解你想要什么,但我可以给你一些提示

使用正则表达式:

df['actual'] = np.nan
df.loc[(df.Filename.str.contains('^GHT.*')) & (df.Class == 'Europe'), 'Actual'] = 1
df.loc[(df.Filename.str.contains('^HJ.*')) & (df.Class == 'US'), 'Actual'] = 0

等等

您可以根据一个或多个其他列的值将列值设置为任何您喜欢的值。这个玩具示例展示了一种方法:

row1list = ['GHT347', 'Europe']
row2list = ['GHT568', 'lONDON']
row3list = ['KLU', 'lONDON']
df = pd.DataFrame([row1list, row2list, row3list],
columns=['Filename', 'Class'])
df['Actual'] = -1       # start with a value you will ignore
df['Prediction'] = -1
df.loc[(df['Filename'].str.startswith('GHT')) & (df['Class'] == 'Europe'), 'Actual'] = 1
df.loc[(df['Filename'].str.startswith('KL')) & (df['Class'] == 'lONDON'), 'Prediction'] = 2
print(df)
#   Filename   Class  Actual  Prediction
# 0   GHT347  Europe       1          -1
# 1   GHT568  lONDON      -1          -1
# 2      KLU  lONDON      -1           2

相关内容

最新更新