#pandas #database #dataframe
Вопрос:
У меня есть фрейм данных с именами файлов и классификацией, это прогнозы из сети, я хочу отобразить их в целые числа, чтобы оценить прогноз из сети.
Мой фрейм данных-это :
Filename: Class:
GHT347 Europe
GHT568 lONDON
GHT78 Europe
HJU US
HJI lONDON
HJK US
KLO Europe
KLU lONDON
KLP lONDON
KLY1 lONDON
KL34 US
Истинное предсказание должно быть :
БОРЬБА— ЕВРОПА HJU — США КЛ — Лондон
Я хочу сопоставить : БОРЬБА и Европа до 1, США и HJ до 0, KL и Лондон до 2, добавив дополнительные два столбца Прогноз и фактический
Actual Prediction
1 1
1 2
pandas str.метод startswith возвращает значение true или false, здесь мне нужны три значения. Может ли кто-нибудь направить меня?
Ответ №1:
я не могу полностью понять, чего вы хотите, но я могу дать вам несколько советов
используйте регулярные выражения:
df['actual'] = np.nan
df.loc[(df.Filename.str.contains('^GHT.*')) amp; (df.Class == 'Europe'), 'Actual'] = 1
df.loc[(df.Filename.str.contains('^HJ.*')) amp; (df.Class == 'US'), 'Actual'] = 0
и так далее
Ответ №2:
Вы можете установить значения столбцов на все, что вам нравится, на основе значений одного или нескольких других столбцов. Этот пример игрушки показывает один из способов сделать это:
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')) amp; (df['Class'] == 'Europe'), 'Actual'] = 1
df.loc[(df['Filename'].str.startswith('KL')) amp; (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