【问题标题】:pandas assigning values bases on another columns熊猫根据另一列分配值
【发布时间】:2020-12-11 20:38:21
【问题描述】:

我的数据框

Terrain     
M1
M2
F
G
S
B1
B2

我想打开另一列 Terrain_Type 并分配值,例如,如果 Terrain 是 M1、M2、B1、B2 作为 Terrain_Type 中的 Composite 和 Terrain 中的 S 作为 Terrain_Type 中的 Sod 而不是 F 和 G 我想分配 Gravel 在地形类型列。

我试过这个代码

data['Terrain_Type'] = data['Terrain'].map({['M1','M2','B1','B2']:'Composite', 'S':'Sod',['F','G']:'Gravel'})

但它没有成功。谁能建议我如何解决我的代码中的这个错误

【问题讨论】:

    标签: pandas assign


    【解决方案1】:

    我相信以下内容对你有用:)

    def get_terrain_type(row):
        if row in ["M1", "M2", "B1", "B2"]:
            return "Composite"
        elif row == "S":
            return "Sod"
        else:
            return "Gravel"
    data["Terain_Type"] = data["Terrain"].map(lambda x: get_terrain_type(x))
    

    【讨论】:

      【解决方案2】:
      L1 = ['M1','M2','B1','B2']
      d1 = dict.fromkeys(L1, 'Composite')
      
      L2 = ['F','G']
      d2 = dict.fromkeys(L2, 'Gravel')
      
      L3 = ['S']
      d3 = dict.fromkeys(L3, 'Sod')
      
      d = {**d1, **d2, **d3}
      

      地图:

      df['Terrain_Type'] = df['Terrain'].map(d)
      

      输出:

        Terrain  Terrain_Type
      0   M1     Composite
      1   M2     Composite
      2   F      Gravel
      3   G      Gravel
      4   S      Sod
      5   B1     Composite
      6   B2     Composite
      

      【讨论】:

        【解决方案3】:

        您需要使用有效的字典进行映射,并且在您所拥有的内容中,您使用列表作为键,这可能会出现问题。所以让我们假设字典是这样的:

        import pandas as pd                                                                               
        data = pd.DataFrame({'Terrain':['M1','M2','F','G','S','B1','B2']}) 
        
        d = {'Composite':['M1','M2','B1','B2'],'Sod':['S'],'Gravel':['F','G']}
        

        我们可以创建一个反向的,将地形映射到类型:

        new_dic = {}
        for k,v in d.items():
            for x in v:
                new_dic[x]=k
        
        new_dic                                                                                           
        {'M1': 'Composite',
         'M2': 'Composite',
         'B1': 'Composite',
         'B2': 'Composite',
         'S': 'Sod',
         'F': 'Gravel',
         'G': 'Gravel'}
        

        那么这将起作用:

        data["Terain_Type"] = data["Terrain"].map(new_dic) 
        
        data
        
          Terrain Terain_Type
        0      M1   Composite
        1      M2   Composite
        2       F      Gravel
        3       G      Gravel
        4       S         Sod
        5      B1   Composite
        6      B2   Composite
        

        【讨论】:

          猜你喜欢
          • 2023-02-15
          • 2017-12-18
          • 1970-01-01
          • 2023-01-20
          • 2016-08-09
          • 1970-01-01
          • 2020-11-26
          • 2019-06-05
          • 2019-08-11
          相关资源
          最近更新 更多