根据字符串值创建分类列

时间:2018-07-27 15:01:19

标签: python pandas dictionary

我有一个简单的问题,但是我在实现自己想要的东西时遇到了麻烦。我有一个区列,每个城市的所有区都有32个不同的值。我想创建一个“扇区”列,该列说明该区域属于哪个扇区。 我以为显而易见的方法是通过词典和地图,但无法使其起作用:

sectores={'sector oriente':['Vitacura, Las Condes, Lo Barnechea', 'La Reina','Ñuñoa','Providencia'],
     'sector suroriente':['Peñalolén','La Florida', 'Macul'],
     'sector sur': ['La Granja','La Pintana','Lo Espejo','San Ramón','La Cisterna','El Bosque','Pedro Aguirre Cerda','San Joaquín','San Miguel'],
     'sector surponiente':['Maipú','Estación Central','Cerrillos'],
     'sector norponiente':['Cerro Navia','Lo Prado','Pudahuel','Quinta Normal','Renca'],
     'sector norte':['Conchalí','Huechuraba','Independencia','Recoleta','Quilicura'],
     'sector centro':['Santiago']}

我需要切换键和值:

sectores = dict((y,x) for x,y in sectores.items())

然后尝试将其映射:

df['sectores']=df['district'].map(sectores)

但是我得到了:

TypeError: unhashable type: 'list'

这是正确的方法吗?我应该再尝试其他吗? 预先感谢!

编辑:这是df ['district']的样子:

district

Maipú
Quilicura
Independencia
Conchalí
...

1 个答案:

答案 0 :(得分:1)

您正尝试使用lists作为dict中的键,这是不可能的,因为列表是可变的且不可散列。

相反,通过迭代以下值来使用字符串:

sectores = {i: k for k, v in sectores.items() for i in v}

然后,您可以使用pd.Series.map

df['sectores']=df['district'].map(sectores)

应该工作