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

我有以下内容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])

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


开满天机
浏览 65回答 4
4回答

慕码人2483693

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

梵蒂冈之花

使用pd.DataFrame构造函数 withSeries.map并使用pd.concatconcat with df:In [2696]: df = pd.concat([df,pd.DataFrame(df.Name.map(d).tolist(), columns=['Gender', 'Age'])], axis=1)In [2695]: dfOut[2696]:      Name  Gender Age0    Jack    Male  221    Alex    Male  262  Jackie  Female  283   Susan  Female  30

HUX布斯

取出字典中的所有值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 = {'Alex':['Male','26'],'Jackie':['Female','28'],'Susan':['Female','30']}print (df)     Name  Gender  Age0    Alex    Male   261    Jack     NaN  NaN2  Jackie  Female   283   Susan  Female   30DataFrame.from_dict从字典中使用并添加到列Nameby DataFrame.join,优点是输入数据中的更多列都以相同的方式工作:df = df.join(pd.DataFrame.from_dict(d, orient='index', columns=['Gender','Age']), on='Name')print (df)     Name  Gender Age0    Jack    Male  221    Alex    Male  262  Jackie  Female  283   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 Age0    Jack    Male  221    Alex    Male  262  Jackie  Female  283   Susan  Female  30
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python