如何将数据框列映射到列表字典?

时间:2021-01-06 01:45:39

标签: python pandas list dataframe dictionary

我有一个包含两列的数据框,其中一个类别 (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

谢谢

1 个答案:

答案 0 :(得分:3)

使用:

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']}