首页 > 解决方案 > 如何在熊猫中映射列值?

问题描述

在我的文件中,一列包含不同的成绩(列名='成绩)。

例如:91 50K、92 60K、DIESEL、ADBlU 等。

对于所有这些等级,我需要将它们分类为几个等级;

例如: 91 50K= Petrol

在我的 python 中,我该怎么做?请注意,我可以将整列传递给函数。但是函数必须用正确的值重写每一行的值;

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

标签: pythonpandas

解决方案


您可以尝试将字典与 map() 函数一起使用。像这样的东西:

dict = {'91 50K': 'Petrol', .........}
df['Grades'] = df['Grades'].map(dict)

推荐阅读