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