大 pandas -将嵌套的字典值映射到dataframe列 [英] pandas - map nested dictionary values to dataframe column

查看:85
本文介绍了大 pandas -将嵌套的字典值映射到dataframe列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要进一步上一个有关将字典值映射到数据框的问题.我有一个简单的数据框df,例如:

I'm going a little further this previous question about mapping dictionary values to dataframes. I have a simple dataframe df like:

U,id
111,01
112,02
112,03
113,04
113,05
113,06
114,07

我想将以下嵌套字典映射到新列上:

and I want to map on a new column the following nested dictionary:

d = {112: {'en': 1, 'es': 2}, 113: {'zh': 1, 'ja': 1, 'es': 2}, 114: {'es': 1}, 111: {'ar': 2, 'en': 1}}

仅考虑最常见的L值,即112:'es',113:'es',114:'es',111:'ar'.

taking into account only the most frequent L values, i.e. 112:'es', 113:'es', 114:'es', 111:'ar'.

在一个简单的字典情况下,我可以使用df['C'] = df['U'].map(d).我该如何只取以前的最高值呢?结果数据框将显示为:

On a simple dictionary case, I can use df['C'] = df['U'].map(d). How can I do the same taking only the previous highest values? The resulting dataframe would appear as:

U,id,C
111,01,ar
112,02,es
112,03,es
113,04,es
113,05,es
113,06,es
114,07,es

推荐答案

我将dict拼合成一个新的dict,然后您可以像以前一样调用map:

I'd flatten the dict to create a new dict and then you can call map as before:

In [44]:

max_d={}
for k,v in d.items():
    max_d[k] = max(v, key=v.get)
max_d
Out[44]:
{111: 'ar', 112: 'es', 113: 'es', 114: 'es'}
In [45]:

df['C'] = df['U'].map(max_d)
df  
Out[45]:
     U  id   C
0  111   1  ar
1  112   2  es
2  112   3  es
3  113   4  es
4  113   5  es
5  113   6  es
6  114   7  es

这篇关于大 pandas -将嵌套的字典值映射到dataframe列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆