#python-3.x #pandas #mapping
#python-3.x #pandas #сопоставление
Вопрос:
У меня есть фрейм данных с такими столбцами, как название компании, цена, покупка / продажа, кол-во. Я хочу преобразовать любой столбец, содержащий строку, в числовое значение. Т.Е. сопоставление, скажем, buy = 1, sell = 2 и т.д. В идеале я хотел бы создать функцию для этого.
Я знаю, что могу использовать:
df['company_value'] = df['company_name'].rank(method='dense', ascending=False).astype(int)
Но как мне создать функцию для сопоставления любого столбца, содержащего строку / слово, с отображением?
Комментарии:
1. можем ли мы получить образец входных и выходных данных, чтобы мы могли воспроизвести и решить эту проблему?
Ответ №1:
Используя примерные данные EddyG о
df = pd.DataFrame(np.array(['monday','tuesday','wednesday','monday','thursday','monday','friday','monday','saturday','sunday']),columns=['G'])
Вы могли бы просто использовать
map_dict = dict(enumerate(df.G.unique()))
предоставляя вам
{0: 'monday',
1: 'tuesday',
2: 'wednesday',
3: 'thursday',
4: 'friday',
5: 'saturday',
6: 'sunday'}
Ответ №2:
РЕДАКТИРОВАТЬ: было вызвано ответом Джоша Фридлендера ниже. Мне нравится его подход, но у него неправильное отображение. Используя эту идею:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.array(['monday','tuesday','wednesday','monday','thursday','monday','friday','monday','saturday','sunday']),columns=['G'])
def mapDFcol(df,colName):
map_dict = dict([[j,i] for i,j in enumerate(df.loc[:,colName].unique())])
df[colName 'map'] = [map_dict[i] for i in df.loc[:,colName] ]
return df
mapDFcol(df,'G')