Панды: Создайте столбец с (1,2,3), если строка другого значения строки столбца начинается с («A»,»B»,»C»)

#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