Как отобразить значение столбца в пандах? - PullRequest
2 голосов
/ 30 сентября 2019

В моих файлах один столбец, содержащий разные оценки (название столбцов = 'Оценки).

Например: 91 50K, 92 60K, DIESEL, ADBlU и т. Д.

Для всех этих оценок Iнужно классифицировать их по нескольким классам;

например : 91 50K= Petrol

В моем питоне, как я могу это сделать? Обратите внимание, что я могу передать весь столбец функции. но функция должна переписать значение каждой строки с правильным;

def checkgrades(data):
df['Grades']=???
???

В соответствии с приведенными ниже ответами я пытаюсь;

 df_dips=map_dips_grades(df_dips)
df_sales = df_sales.merge(df_dips, left_on=['Site Name', 'Date','GradeNo'],
                              right_on=['Site', 'Dip Time', 'Product'], how='left').fillna(0)



def map_dips_grades(data):

    d1 = {'Diesel': ['DIESEL', 'DIESEL 1'],
          'Unleaded': ['91','91 UNLEADED'],
          'PULP':['95','95 ULP'],
          'PULP98':['98','98 20K'],
          'Vortex Diesel':['DIESEL ULT R'],
          'Adblue':['ADBLU','ADO']}

    d = {k: oldk for oldk, oldv in d1.items() for k in oldv}

    data['Product'].map(d)
    return data

Но я получаю;

ValueError: You are trying to merge on int64 and object columns. If you wish to proceed you should use pd.concat

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Вы можете попробовать использовать словарь вместе с функцией map (). Как то так:

dict = {'91 50K': 'Petrol', .........}
df['Grades'] = df['Grades'].map(dict)
1 голос
/ 30 сентября 2019

Вы можете создать словарь всех возможных значений в Grades, а затем Series.map:

#test all possible unique values
print (df['Grades'].unique())

d = {'91 50K':'Petrol','92 60K':'Petrol','DIESEL':'Diesel',...}

df['Grades'] = df['Grades'].map(d)

Другой возможный словарь для меньшего набора текста - это набор списков:

d1 = {'Petrol':['91 50K','92 60K'],
      'Diesel':['DIESEL']}

#swap key values in dict
#http://stackoverflow.com/a/31674731/2901002
d = {k: oldk for oldk, oldv in d1.items() for k in oldv}
print (d)
{'91 50K': 'Petrol', '92 60K': 'Petrol', 'DIESEL': 'Diesel'}

df['Grades'] = df['Grades'].map(d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...