将嵌套词典列表映射到pandas Dataframe Coulmn

时间:2020-04-24 16:56:37

标签: python-3.x pandas dictionary

我目前正在尝试从嵌套词典列表的字典中映射特定值,并且当前我试图在其中一个列表的值具有多个词典的情况下不覆盖以前的映射值(带有我)。

我已经从question中引用了这段可粉碎的代码,但是它覆盖了我在这种情况下不想要的先前值。

country_dict = {}
name_dict = {}

for ky, va in match_dict.items():
    for c, d in enumerate(va):
        country_dict[ky] = d['id']
        name_dict[ky] = d['attributes.name']

ap['matching_id'] = ap['name'].map(country_dict)
ap['matching_id_name'] = ap['name'].map(name_dict)

当其中一则字典的值只有一本字典时,这可以很好地工作:

 {Ørland Airport :

 {'id': 'ID1', 'attributes.name': 'Greenland airport', 'type': 'Facility', 'attributes.LOC': nan, 'attributes.TICKETS': 52, 'attributes.pos.latitude': nan, 'attributes.pos.longitude': nan, 'attributes.containers': nan, 'internal_attributes.protected': nan}}

但是,当出现多个字典列表时,它将覆盖前一个值,并使用最新的值覆盖

{Ørland Airport :

 [{'id': 'ID1', 'attributes.name': 'Greenland airport', 'type': 'Facility', 'attributes.LOC': nan, 'attributes.TICKETS': 52, 'attributes.pos.latitude': nan, 'attributes.pos.longitude': nan, 'attributes.containers': nan, 'internal_attributes.protected': nan},

 {'id': 'ID2', 'attributes.name': 'Ørland Airport', 'type': 'Airport', 'attributes.LOC': nan, 'attributes.TICKETS': 210, 'attributes.pos.latitude': 63.69891, 'attributes.pos.longitude': 9.604, 'attributes.containers': "[ABC]", 'internal_attributes.protected': 1.0},

 {'id': 'ID3', 'attributes.name': '#Orlando airport', 'type': 'Facility', 'attributes.LOC': nan, 'attributes.TICKETS': 87, 'attributes.pos.latitude': nan, 'attributes.pos.longitude': nan, 'attributes.containers': nan, 'internal_attributes.protected': nan},

 {'id': 'ID4', 'attributes.name': 'RNC Orlando airport', 'type': 'Facility', 'attributes.LOC': nan, 'attributes.TICKETS': 26, 'attributes.pos.latitude': nan, 'attributes.pos.longitude': nan, 'attributes.containers': nan, 'internal_attributes.protected': nan}]}

当前代码会将ap['matching_id']列值映射为字典ID1中的最后一个期望值,如果列表中只有一个元素,这很好,但是如果有多个元素,则仅映射ID4,如果可能的话,我希望将其映射为[ID1, ID2, ID3, ID4]

当前输出如下:

   matching_id   matching_id_name  
0  'ID1'        'Greenland airport

但是所需的输出是这样的:

   matching_id                     matching_id_name  
0 ['ID1', 'ID2', 'ID3', 'ID4']    ['Greenland airport', 'Ørland Airport', '#Orlando airport', 'RNC Orlando airport']  

我知道奇怪的问题,但是任何建议都会有所帮助!让我知道是否缺少任何东西!

0 个答案:

没有答案