如何在熊猫字典中映射到多个值

时间:2020-10-28 07:48:13

标签: python pandas

我有以下pandas df

Name
Jack
Alex
Jackie
Susan

我也有以下格言:

d = {'Jack':['Male','22'],'Alex':['Male','26'],'Jackie':['Female','28'],'Susan':['Female','30']}

我想为GenderAge添加两个列,以便我的df返回:

Name      Gender    Age
Jack      Male       22
Alex      Male       26
Jackie    Female     28
Susan     Female     30

我尝试过:

df['Gender'] = df.Name.map(d[0])
df['Age'] = df.Name.map(d[1])

但是没有这种运气。任何想法或帮助将不胜感激!谢谢!

4 个答案:

答案 0 :(得分:2)

df['Gender'] = df.Name.map(lambda x: d[x][0])
df['Age'] = df.Name.map(lambda x: d[x][1])

答案 1 :(得分:1)

pd.DataFrame构造函数与Series.map结合使用,并将pd.concatdf结合使用:

In [2696]: df = pd.concat([df,pd.DataFrame(df.Name.map(d).tolist(), columns=['Gender', 'Age'])], axis=1)

In [2695]: df
Out[2696]: 
     Name  Gender Age
0    Jack    Male  22
1    Alex    Male  26
2  Jackie  Female  28
3   Susan  Female  30

答案 2 :(得分:1)

获取字典的所有值

d = {'Jack':['Male','22'],'Alex':['Male','26'],'Jackie':['Female','28'],'Susan':['Female','30']}

value_list = list(d.values())
df = pd.DataFrame(value_list, columns =['Gender', 'Age'])
print(df)  

答案 3 :(得分:0)

如果字典中没有匹配项,则解决方案也可以很好地工作:

d = {'Alex':['Male','26'],'Jackie':['Female','28'],'Susan':['Female','30']}


print (df)
     Name  Gender  Age
0    Alex    Male   26
1    Jack     NaN  NaN
2  Jackie  Female   28
3   Susan  Female   30

使用字典中的DataFrame.from_dict并按DataFrame.join添加到列Name中,好处是输入数据中的更多列都以相同的方式工作:

df = df.join(pd.DataFrame.from_dict(d, orient='index', columns=['Gender','Age']), on='Name')
print (df)
     Name  Gender Age
0    Jack    Male  22
1    Alex    Male  26
2  Jackie  Female  28
3   Susan  Female  30

如果创建2个字典,您的解决方案应该可以工作:

d1 = {k:v[0] for k,v in d.items()}
d2 = {k:v[1] for k,v in d.items()}

df['Gender'] = df.Name.map(d1)
df['Age'] = df.Name.map(d2)
print (df)
     Name  Gender Age
0    Jack    Male  22
1    Alex    Male  26
2  Jackie  Female  28
3   Susan  Female  30