我有以下pandas df
:
Name
Jack
Alex
Jackie
Susan
我也有以下格言:
d = {'Jack':['Male','22'],'Alex':['Male','26'],'Jackie':['Female','28'],'Susan':['Female','30']}
我想为Gender
和Age
添加两个列,以便我的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])
但是没有这种运气。任何想法或帮助将不胜感激!谢谢!
答案 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.concat
与df
结合使用:
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