熊猫映射到数组字典

问题描述 投票:1回答:2

我有一个国家代码的df:

  cntr
0 CN
1 CH

我想从字典中映射我的全名和地区

cntrmap = {"CN":["China","Asia"],"CH":["Switzerland","Europe"]}

我希望有这样的东西,但不起作用..

df['name'] = df['cntr'].map(cntrmap)[0]
df['region'] = df['cntr'].map(cntrmap)[1]

你们有什么建议吗?感谢大家!

python pandas dataframe mapping
2个回答
1
投票

您可以通过DataFrame.from_dictDataFrame.join创建帮助器DataFrame,默认左边连接为原始DataFrame:

df = pd.DataFrame({'cntr':['CN','CH']})

cntrmap = {"CN":["China","Asia"],"CH":["Switzerland","Europe"]}

df1 = pd.DataFrame.from_dict(cntrmap, orient='index', columns=['name','region'])

df = df.join(df1, on='cntr')
print (df)
  cntr         name  region
0   CN        China    Asia
1   CH  Switzerland  Europe

如果为map创建2个词典,您的解决方案是有效的:

map1 = {k:v[0] for k, v in cntrmap.items()}
map2 = {k:v[1] for k, v in cntrmap.items()}

df['name'] = df['cntr'].map(map1)
df['region'] = df['cntr'].map(map2)

1
投票

使用map可以达到同样的效果:

df.join(pd.DataFrame(df['cntr'].map(m).tolist(), columns=['name', 'region']))

输出:

  cntr         name  region
0   CN        China    Asia
1   CH  Switzerland  Europe
© www.soinside.com 2019 - 2024. All rights reserved.