我有一个简单的问题,但是我在实现自己想要的东西时遇到了麻烦。我有一个区列,每个城市的所有区都有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í
...
答案 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)
应该工作