基于字典列表将函数应用于列

2024-05-26 11:54:58 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个字典列表,如下所示:

[{'source_id': '1', 'source_desc': 'XML1'},
 {'source_id': '2', 'source_desc': 'XML2'},
 {'source_id': '3', 'source_desc': 'XML3'}]

现在,我有一个熊猫数据帧,如下所示:

di = [{'source_id': '1','city':'NY'},
       {'source_id': '2','city':'Santiago'},
       {'source_id': '3','city':'Berlin'}]
dff=pd.DataFrame(di)
dff

现在,我想在前面的字典集合的基础上添加一个列source_desc。 我试过:

dff['source_desc'] = dff['source_id'].astype(str).apply(lambda x: d['source_desc'] for d in di if d['source_id'] == x)

我不明白为什么这不起作用

编辑: 所需的输出将是类似于:

desired = [{'source_id': '1','city':'NY','source_desc': 'XML1' },
       {'source_id': '2','city':'Santiago','source_desc': 'XML2'},
       {'source_id': '3','city':'Berlin','source_desc': 'XML3'}]
desired_df=pd.DataFrame(desired)
desired_df

Tags: idcitysource字典descpdberlindi
3条回答

最好让pandas处理read方法,然后使用merge方法

source_json = [{'source_id': '1', 'source_desc': 'XML1'},
 {'source_id': '2', 'source_desc': 'XML2'},
 {'source_id': '3', 'source_desc': 'XML3'}]

df = dff.merge(pd.json_normalize(source_json), on=['source_id'])

  source_id      city source_desc
0         1        NY        XML1
1         2  Santiago        XML2
2         3    Berlin        XML3

它成为一个生成器,您需要next

dff['source_desc'] = dff['source_id'].apply(lambda x: next((y['source_desc'] for y in d if y['source_id'] == x)))

>>> dff
  source_id      city source_desc
0         1        NY        XML1
1         2  Santiago        XML2
2         3    Berlin        XML3
>>> 

只需数据帧和合并。代码如下

dff.merge(pd.DataFrame([{'source_id': '1', 'source_desc': 'XML1'},
 {'source_id': '2', 'source_desc': 'XML2'},
 {'source_id': '3', 'source_desc': 'XML3'}]), how='left', on='source_id')

输出

    source_id      city source_desc
0         1        NY        XML1
1         2  Santiago        XML2
2         3    Berlin        XML3

相关问题 更多 >