Python 如何映射熊猫中的列值?

Python 如何映射熊猫中的列值?,python,pandas,Python,Pandas,在“我的文件”中,有一列包含不同的等级(列名称=”等级) 例如:9150K、9260K、柴油机、ADBlU等 对于所有这些等级,我需要将它们分为几个等级 eg:91 50K=汽油机 在我的python中,如何实现这一点?请注意,我可以将整个列传递给函数。但函数必须用正确的值重写每一行的值 def checkgrades(data): df['Grades']=??? ??? 根据下面的答案,我尝试 df_dips=map_dips_grades(df_dips) df_sales = df_

在“我的文件”中,有一列包含不同的等级(列名称=”等级)

例如:9150K、9260K、柴油机、ADBlU等

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

eg
:91 50K=汽油机

在我的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

您可以创建
等级中所有可能值的字典,然后:

另一个可能减少键入的字典是目录:

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)

可以尝试将字典与map()函数一起使用。大概是这样的:

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

9150k、9260k、DIESEL、ADBlU等是否表示列中的值(
Grades
)?@ernest_k这些值位于列{Grades')下。我想用一些匹配的等级重写它们。在python中,不要对变量名使用
dict
,因为
内置的
(python代码字)我不知道这一点,我经常使用“dict”。但我不会再使用它了。正如你提到的,我在问题中提供了我的新代码块。你能检查我为什么会出现错误吗?早些时候,我能够合并而没有问题。这个问题是由新的def map dips(数据)等级引起的:method@Ratha-如果使用
数据['Product']=数据['Product'].map(d)<代码> >数据> [产品] >图(D)< /代码>它工作?谢谢你是正确的..他们是不同的Dype,对象和int .我会进一步感谢你的QUICIK答案,它工作得很好.数据类型是问题.我在中间的映射工作中改变了.
dict = {'91 50K': 'Petrol', .........}
df['Grades'] = df['Grades'].map(dict)