【发布时间】:2020-11-04 15:31:23
【问题描述】:
我有一个与此问题相关的问题:Aggregate column values in pandas GroupBy as a dict
我的输入数据有以下列:
例如,输入将具有以下格式
language, product_id, shelf_id, rank, fiction, pages
English, 742005, 4560, 10.2, 1.0, 456
English, 6000075389352, 4560, 49, 1.0, 234
French, 899883993, 4560, 32, 0.0, 125
French, 731317391, 7868, 81, 1.0, 576
French, 235678655, 7868, 12, 1.0, 235
我想对语言和货架 ID 列执行“分组”,并获取每个产品 ID 的剩余属性列表。预期的输出应具有以下格式:
Language, shelf_id, {product_id: [rank, fiction, pages]} 用于每个分组记录。
对于给定的输入,我的 DESIRED OUTPUT 将如下:
language, shelf_id, mapping
English, 4560, {742005: [10.2, 1.0, 456], 6000075389352: [49, 1.0, 234]}
French, 4560, {899883993: [32, 0.0, 125]}
French, 7868, {731317391: [81, 1.0, 576], 235678655: [12, 1.0, 235]}
如果只需要考虑一列(在结果字典中),上述帖子中提供的解决方案可以很好地解决问题:
df = pd.read_csv('file.csv', header=None)
df.columns = ['Lang', 'product_id', 'shelf_id', 'rank_id']
(df.groupby(['Lang', 'shelf_id'], as_index=False)
.apply(lambda x: dict(zip(x['product_id'], x['rank_id'])))
.reset_index(name='mapping'))
这会产生:
Lang shelf_id mapping
0 English 4560 {742005: 10.2, 6000075389352: 49.0}
1 French 4560 {899883993: 32.0}
2 French 7868 {731317391: 81.0, 235678655: 12.0}
谁能帮助我根据我的情况调整这个解决方案?任何建议将不胜感激。
【问题讨论】:
标签: python pandas dictionary group-by aggregate