通过映射现有列来创建新列

时间:2020-08-19 07:42:53

标签: python pandas

我有dataframe列,例如 df ['towns']

Apple
banana
cigor
delmon

和字典

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

我想将新列创建为 df ['city'] ,并根据我的词典为每行添加标签。正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

使用Series.map,但首先将字典转换为小写:

#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

或者如果需要将值转换为大写单词:

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)