首页 > 解决方案 > 如何将数据框列映射到列表字典?

问题描述

我有一个包含两列的数据框,其中一个类别(area_id)包含另一个类别(location_id),我怎样才能获得一个列表字典,其中键是“area_id”,它们各自的值是给定中存在的“location_id”列表“area_id”?

具体来说,给定数据框:

df = pd.DataFrame(data={'area_id': ['area_1', 'area_1', 'area_1', 'area_2', 'area_2', 'area_3'],
                        'location_id': ['loc_a', 'loc_a', 'loc_b', 'loc_c', 'loc_d', 'loc_e']})
    area_id location_id
0   area_1  loc_a
1   area_1  loc_a
2   area_1  loc_b
3   area_2  loc_c
4   area_2  loc_d
5   area_3  loc_e

我想要以下字典:

{'area_1': ['loc_a', 'loc_b'],
 'area_2': ['loc_c', 'loc_d'],
 'area_3': ['loc_e']}

下面的代码是一个可行的解决方案,但我想知道是否有更优雅的解决方案可以避免使用“for”循环:

res = {}
for _area in df['area_id'].unique():
    _locs = list(df[df['area_id'] == _area]['location_id'].unique())
    res[_area] = _locs

谢谢

标签: pythonpandaslistdataframedictionary

解决方案


利用:

df.drop_duplicates().groupby('area_id')['location_id'].agg(list).to_dict()

输出:

{'area_1': ['loc_a', 'loc_b'],
 'area_2': ['loc_c', 'loc_d'],
 'area_3': ['loc_e']}

推荐阅读