2017-09-18 44 views
3

我有一个graphlab sframe数据框,其中很少的行在“uid”列中具有相似的id值。graphlab - sframe:如何删除在列上具有相同ID和条件的行?

| VIM Document Type | Vendor Number & Zone | Value <5000 or >5000 | Today Status | 
+-------------------+----------------------+----------------------+--------------+ 
|  PO_VR_GLB  |  1613407EMEAi  | Less than 5000 |  0  | 
|  PO_VR_GLB  | 249737LATIN AMERICA | More than 5000 |  1  | 
|  PO_MN_GLB  | 1822317NORTH AMERICA | Less than 5000 |  1  | 
|  PO_MN_GLB  | 1822317NORTH AMERICA | Less than 5000 |  1  | 
|  PO_MN_GLB  | 1822317NORTH AMERICA | Less than 5000 |  1  | 
|  PO_MN_GLB  | 1216902NORTH AMERICA | More than 5000 |  1  | 
|  PO_MN_GLB  |  1213709EMEAi  | Less than 5000 |  0  | 
|  PO_MN_GLB  | 882843NORTH AMERICA | More than 5000 |  1  | 
|  PO_MN_GLB  | 2131503ASIA PACIFIC | More than 5000 |  1  | 
|  PO_MN_GLB  | 2131503ASIA PACIFIC | More than 5000 |  1  | 
+-------------------+----------------------+----------------------+--------------+ 
+---------------------+ 
|   uid   | 
+---------------------+ 
|  63068$#069  | 
|  5789$#13  | 
| 12933036$#IN6532618 | 
| 12933022$#IN6590132 | 
| 12932349$#IN6636468 | 
| 12952077$#203250 | 
| 13012770$#MUML04184 | 
| 12945049$#112370 | 
| 13582330$#CI160118 | 
| 13012770$#MUML04184| 

在这里,我要保留所有具有独特的UID行,只有具有相同的UID行之一,必须保留可以是今天状态= 1的任何行,行(也就是说,可是行和uid和行状态相同的行,但其他字段不同,在这种情况下,我们可以保留这些行中的任何一行)。我想在graphlab框架中执行这些操作,但我无法弄清楚如何继续。

回答

1

你可以使用SFrame.unique(),可以给你的唯一行

sf = sf.unique() 

其他方式也可以用两种方法groupby()join()方法,你可以指定列名和进一步的工作。您可以通过各种方式阅读有关turi.comclick的文档。

另一种方法(我个人比较喜欢)是将SFrame转换为熊猫的数据框,并从事数据操作并将大熊猫Dataframe转换为SFrame。这取决于你的选择,我希望这有助于。

+0

感谢您的回复。问题是.unique只会删除检查一行中所有列的重复项。我只想做几列,也就是说,可以有行的uid和行状态相同,但其他字段不同,在这种情况下,我们可以保留这些行中的任何一行。此外,groupby不会存储整个sframe,它会将其剪切到您在key_columns中提到的列。 – Tarun

+1

@Tarun我个人会选择列上的groupby(),然后使用.join加入选定列上的sframe。是的,我完全同意你的看法,groupby不保留所有的sframe,但是这是使用groupby来处理选定的列。其他方法是你可以使用熊猫并轻松地在多个列上工作。 –

+0

@Tarun请通过在答案中打勾来验证此答案。谢谢 –

相关问题