Python 如何在pandas中映射到字典中的多个值

Python 如何在pandas中映射到字典中的多个值,python,pandas,Python,Pandas,我有以下建议: 我也有以下意见: d = {'Jack':['Male','22'],'Alex':['Male','26'],'Jackie':['Female','28'],'Susan':['Female','30']} 我想为性别和年龄添加两个列,以便我的df返回: 我试过: df['Gender'] = df.Name.map(d[0]) df['Age'] = df.Name.map(d[1]) 但没有这样的运气。任何想法或帮助都将不胜感激!谢谢 将构造函数与df一起使用,并将其

我有以下建议:

我也有以下意见:

d = {'Jack':['Male','22'],'Alex':['Male','26'],'Jackie':['Female','28'],'Susan':['Female','30']}
我想为性别和年龄添加两个列,以便我的df返回:

我试过:

df['Gender'] = df.Name.map(d[0])
df['Age'] = df.Name.map(d[1])
但没有这样的运气。任何想法或帮助都将不胜感激!谢谢

将构造函数与df一起使用,并将其与df一起使用:

将构造函数与df一起使用,并将其与df一起使用:


如果字典中没有匹配项,解决方案也能正常工作,如:

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
从字典中使用并通过添加到列名,优点是如果输入数据中的更多列都以相同的方式工作:

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
如果创建两个字典,您的解决方案应该可以工作:

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

如果字典中没有匹配项,解决方案也能正常工作,如:

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
从字典中使用并通过添加到列名,优点是如果输入数据中的更多列都以相同的方式工作:

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
如果创建两个字典,您的解决方案应该可以工作:

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

取字典中的所有值

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)  

取字典中的所有值

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)  

谢谢我创建了d1和d2,效果非常好-非常感谢@SOK-好的,太好了,所以总是匹配字典中的键和列名中的值?谢谢!我创建了d1和d2,效果非常好-非常感谢@SOK-好的,太好了,所以总是匹配字典中的键和列名中的值?非常感谢!这是有效的,我最终使用了下面的解决方案。再次感谢!非常感谢!这是有效的,我最终使用了下面的解决方案。再次感谢!谢谢你的回复。我最终选择了第一个答案,因为它与我的完整数据帧无缝地工作,而不是像您在实例中那样创建新的df感谢您的响应。我最终选择了第一个答案,因为它与我的完整数据帧无缝地工作,而不是像您在实例中那样创建新的df