Python Pandas to_dict函数

时间:2015-05-05 18:29:21

标签: python pandas

我正在尝试创建一个字典,但无法让它以我想要的方式工作。我觉得我很近。我是一个yelp数据:

import pandas as pd
file_rev = 'blah.csv'

reviews=pd.read_csv(file_rev, sep=',',header=0, nrows=10000)

cols = ['user_id', 'business_id', 'stars']
cat_rev = reviews[cols]

print cat_rev

DF:

                   user_id             business_id  stars
0   Xqd0DzHaiyRqVH3WRG7hzg  vcNAWiLM4dR7D2nwwJ7nCA      5
1   H1kH6QZV7Le4zqTRNxoZow  vcNAWiLM4dR7D2nwwJ7nCA      2
2   zvJCcrpm2yOZrxKffwGQLA  vcNAWiLM4dR7D2nwwJ7nCA      4
3   KBLW4wJA_fwoWmMhiHRVOA  vcNAWiLM4dR7D2nwwJ7nCA      4
4   zvJCcrpm2yOZrxKffwGQLA  vcNAWiLM4dR7D2nwwJ7nCA      4
5   Qrs3EICADUKNFoUq2iHStA  vcNAWiLM4dR7D2nwwJ7nCA      1
6   jE5xVugujSaskAoh2DRx3Q  vcNAWiLM4dR7D2nwwJ7nCA      5
7   QnhQ8G51XbUpVEyWY2Km-A  vcNAWiLM4dR7D2nwwJ7nCA      5
8   tAB7GJpUuaKF4W-3P0d95A  vcNAWiLM4dR7D2nwwJ7nCA      1
9   GP-h9colXgkT79BW7aDJeg  vcNAWiLM4dR7D2nwwJ7nCA      5
10  uK8tzraOp4M5u3uYrqIBXg  UsFtqoBl7naz8AVUBZMjQQ      5

我希望能够将其创建为看起来像的字典:

abc = {user1 : {business1:star_rating, business2:star_rating…, 
                businessN:star_rating}, 
       user2: {} … }

然后访问我只会: abc[user1]会为我提供用户1审核的所有地点和星标 abc[user1][place1]会给出相应的星级评分。

我尝试了to_dict熊猫功能。我先尝试groupby,然后dict(list(groupby())),似乎没有任何东西可以将它转换为我想要的。

也不,但几乎:

ddd = cat_rev.set_index('user_id').to_dict(outtype='list')

2 个答案:

答案 0 :(得分:4)

你可以使用groupby和dict-comprehension:

{user_id: pd.Series(grp['stars'].values, index=grp['business_id']).to_dict() 
 for user_id, grp in df.groupby(['user_id'])}

产量

{'GP-h9colXgkT79BW7aDJeg': {'vcNAWiLM4dR7D2nwwJ7nCA': 5},
 'H1kH6QZV7Le4zqTRNxoZow': {'vcNAWiLM4dR7D2nwwJ7nCA': 2},
 'KBLW4wJA_fwoWmMhiHRVOA': {'vcNAWiLM4dR7D2nwwJ7nCA': 4},
 'QnhQ8G51XbUpVEyWY2Km-A': {'vcNAWiLM4dR7D2nwwJ7nCA': 5},
 'Qrs3EICADUKNFoUq2iHStA': {'vcNAWiLM4dR7D2nwwJ7nCA': 1},
 'Xqd0DzHaiyRqVH3WRG7hzg': {'vcNAWiLM4dR7D2nwwJ7nCA': 5},
 'jE5xVugujSaskAoh2DRx3Q': {'vcNAWiLM4dR7D2nwwJ7nCA': 5},
 'tAB7GJpUuaKF4W-3P0d95A': {'vcNAWiLM4dR7D2nwwJ7nCA': 1},
 'uK8tzraOp4M5u3uYrqIBXg': {'UsFtqoBl7naz8AVUBZMjQQ': 5},
 'zvJCcrpm2yOZrxKffwGQLA': {'vcNAWiLM4dR7D2nwwJ7nCA': 4}}

答案 1 :(得分:2)

您也可以使用索引压缩值...

d = {k:v for k,v in  zip(df.index,df.to_dict('records'))}