如何将Pandas DataFrame两列作为嵌套键、第三列作为值转字典
实现Pandas DataFrame转嵌套字典的两种方法
嘿,这个需求其实用Pandas的内置工具就能轻松搞定,我给你分享两种常用的实现方式,你可以根据场景选:
方法1:分组+字典推导(直观易理解)
先按User列分组,每个分组内把ASIN作为键、Rating作为值生成子字典,最后再把User作为外层键整合起来:
import pandas as pd # 先构造你的示例DataFrame df = pd.DataFrame({ 'User': ['A23VKINWRY6J92', 'A3HC4SRK7B2AXR', 'AE12HJWB5ODOD', 'AL4RYO265J1G'], 'ASIN': ['1476783284', '1496177029', 'B00K2GAUC0', '061579615X'], 'Rating': [5, 5, 4, 3] }) # 生成嵌套字典 my_dict = { user: group.set_index('ASIN')['Rating'].to_dict() for user, group in df.groupby('User') }
验证一下:
print(my_dict['A23VKINWRY6J92']['1476783284']) # 输出5,完全符合你的需求
方法2:多层索引+unstack(更简洁)
利用Pandas的多层索引特性,一步到位生成嵌套结构:
# 同样基于上面的df my_dict = df.set_index(['User', 'ASIN'])['Rating'].unstack().to_dict('index')
这个方法的逻辑是:先把User和ASIN设为双层索引,然后unstack把内层的ASIN转成列,最后用to_dict('index')把每行(对应一个User)转成ASIN-Rating的子字典。
注意事项
如果你的DataFrame里存在重复的User+ASIN组合(同一个用户对同一个ASIN打了多次分),建议先去重或者聚合,比如保留最后一条记录:
df = df.drop_duplicates(subset=['User', 'ASIN'], keep='last')
内容的提问来源于stack exchange,提问作者Guru A
相关产品推荐
相关产品推荐

