0

I have dataframe column let's say df['towns']

Apple
banana
cigor
delmon

and dictionary

cities = {
     'x':[Apple,Banana],
     'y':[Cigor,Zoor,Elk],
     'z':[Delmon,Foo]
}

I want to create new column as df['city'] and label each row according to my dictionary. What is the proper way to do that?

Fragrance
  • 44
  • 7

1 Answers1

0

Use Series.map, but first change dictionary with convert to lowercase:

#swap key values in dict
#http://stackoverflow.com/a/31674731/2901002

d = {k.lower() : oldk for oldk, oldv in cities.items() for k in oldv}

df1['city'] = df1['towns'].str.lower().map(d)
print (df1)
    towns city
0   Apple    x
1  banana    x
2   cigor    y
3  delmon    z

Or if need convert values to capitalize words:

d = {k : oldk for oldk, oldv in cities.items() for k in oldv}
#first letter first word
df1['city'] = df1['towns'].str.title().map(d)
#first letter all words
#df1['city'] = df1['towns'].str.capitalize().map(d)
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252