2015-05-05 43 views
2

我正在嘗試創建一個字典,但無法按照我的打算進行工作。我覺得我很親密。我Yelp的數據DF:Python Pandas to_dict函數

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') 

回答

4

你可以使用GROUPBY和字典-理解:

{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}} 
+0

我<3你!!!!!!!! – ElmoVT

+4

你>我也是3! :) – unutbu

+0

@ZJS下面的答案更清潔,恕我直言。 –

2

你也只是壓縮了值與索引...

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