如何将不同类别映射为一个值?

时间:2019-08-13 02:58:58

标签: python-3.x pandas

我正在尝试将不同的大陆分为5个组:由于大洋洲,南极洲和七个海的样本量不够大,因此它们应该属于一个组

我正在尝试在映射中包含else语句

data_mapped = data.copy()
data_mapped['continent'] = data_mapped['continent'].map({'North America':0,'South America':1,'Europe':2,'Africa':3,'Asia':4, else:5})
data_mapped

但是在这种情况下,python似乎无法识别其他内容。有什么办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

您绝对可以这样做,尽管我不确定您尝试的方式是否可行(如果可能的话,很高兴进行更新)。我将首先设置一些测试数据:

import pandas as pd
continents= ['North America','South America', 'Europe', 
             'Africa', 'Asia', 'Oceania', 'Antarctica', 
             'Oceans', 'Arctic']

df = pd.Series(data=continents)

这是对Pandas数据框的简短回答。我正在建立一个具有各自索引的大洲的字典,如果其中没有大洲,那么我们将在字典中为'None'输入的值设置为 >

indexed_conts = {'North America':0,'South America':1,
                 'Europe':2,'Africa':3,'Asia':4,'None':5} 

new_df = df.map(lambda x: indexed_conts[x] if x in indexed_conts
              else indexed_conts['None'], continents)

与我在下面介绍的详细方法相比,以这种方式设置数据可以更轻松地添加更多的大洲,或将其扩展到其他问题区域。

在一个简单的列表上,这是一种非常冗长的方法。您可以将if彼此嵌套在一起:

for i in map(lambda x: 0 if x=='North America' 
                  else 1 if x=='South America' 
                  else 2 if x=='Europe' 
                  else 3 if x=='Africa' 
                  else 4 if x=='Asia' 
                  else 5, continents):
    print(i)

您可以在Pandas数据框中使用以下详细样式:

indexed_df = df.map(lambda x: 0 if x=='North America' 
              else 1 if x=='South America' 
              else 2 if x=='Europe' 
              else 3 if x=='Africa' 
              else 4 if x=='Asia' 
              else 5, continents)