2017-07-19 171 views
0

這是在以往的採訪中,我有問題。分組數據框中列,並轉換到字典,大熊貓

我們必須具有以下幾列輸入數據:

語言,產品ID,機架ID,等級

例如,輸入將具有以下格式

English, 742005, 4560, 10.2 
English, 6000075389352, 4560, 49 
French, 899883993, 4560, 32 
French, 731317391, 7868, 81 

我們會喜歡「分組依據」操作基於「等級」屬性,這將導致具有以下格式的輸出排序倒序做的語言,貨架ID列和排序的產品清單:

語言,shelf_id,{product_id:rank1,product_id:rank2 ....}

對於每條記錄。

對於給定的輸入,輸出將是以下:

English, 4560, {6000075389352:49, 742005:10.2} 
French, 4560, 899883993:32 
French, 7868, 731317391:81 

我通過使字典的鍵(這是通過組合語言和貨架ID創建)解決了這個問題以及將所述產品ID,每個關鍵的等級。

我的方法有效,但它看起來像有使用Python大熊貓庫做的更簡單的方法。我讀過一些參考,但我仍然不知道是否有給我做了什麼

任何幫助(通過使用語言,貨架標識和具有字典中的鍵創建密鑰解決問題)優良的方法將不勝感激。

回答

1

設置:

df = pd.read_csv('file.csv', header=None) 

df.columns = ['Lang', 'product_id', 'shelf_id', 'rank_id']  

     Lang  product_id shelf_id rank_id 
0 English   742005  4560  10.2 
1 English 6000075389352  4560  49.0 
2 French  899883993  4560  32.0 
3 French  731317391  7868  81.0 

您可以通過Langshelf_id使用df.groupby到組。然後使用df.apply獲得的{productid : rankid}字典:

In [613]: df.groupby(['Lang', 'shelf_id'], as_index=False)[['product_id', 'rank_id']]\ 
    ...:   .apply(lambda x: dict(zip(x['product_id'], x['rank_id'])))\ 
    ...:   .reset_index(name='mapping') 
Out[613]: 
     Lang shelf_id        mapping 
0 English  4560 {6000075389352: 49.0, 742005: 10.2} 
1 French  4560     {899883993: 32.0} 
2 French  7868     {731317391: 81.0} 
+0

感謝您的回答,但你能不能也解釋你如何閱讀文本輸入作爲這樣的數據幀? – user98235

+0

@ user98235用設置信息編輯我的文章。我假設你的數據是在一個CSV文件。 –

+0

@COLDSPEED感謝您的回答,但你還告訴我,如果有什麼是你只需要爲輸入一個文件?例如,我可以輸入它。 – user98235