2017-07-19 109 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