2013-12-18 51 views
1

我已經按照排序順序構建了一個熊貓數據框,並且想要迭代具有相同值的特定列的組。在我看來,groupby功能對此很有用,但據我所知,執行groupby並不能保證密鑰的順序。我如何以排序順序提取unqiue列值。熊貓:遍歷已排序的列的唯一值

下面是一個例子的數據幀:

Foo,1 
Foo,2 
Bar,2 
Bar,1 

我想在那裏的順序是由原始數據幀的順序保證的列表[「富」,「酒吧」]。然後我可以使用這個列表來提取適當的行。這種排序實際上是由數據框中給出的列(未包括在上面的例子中)定義的,所以如果不能直接提取信息,那麼重新排序的解決方案將是可接受的。

+0

你能給出代碼證明爲什麼這在你的情況下失敗嗎?我的經驗是,在Pandas中的'groupby'之後,新的數據幀*的排列順序與原始的未分組數據幀相同。如果您可以提供構建玩具數據框的少量代碼,執行分組,然後顯示手頭的問題,那將會很有幫助。 – ely

+0

如果您只需要按照相同順序列中的值的唯一列表,那麼爲什麼不使用此:'df.c1.unique()',其中c1是您希望唯一值的列的名稱。 – Zelazny7

回答

3

正如在評論中提到,您可以使用其將保留順序列中唯一(不像numpy的獨特的,它不排序):

In [11]: df 
Out[11]: 
    0 1 
0 Foo 1 
1 Foo 2 
2 Bar 2 
3 Bar 1 

In [12]: df[0].unique() 
Out[12]: array(['Foo', 'Bar'], dtype=object) 

然後你就可以使用GROUPBY的訪問相關的行get_group

In [13]: g = df.groupby([0]) 

In [14]: g.get_group('Foo') 
Out[14]: 
    0 1 
0 Foo 1 
1 Foo 2  
+0

當我嘗試使用上面的示例時,我得到「數組」未定義。它是在什麼地方定義的? – Rohit

+0

@aging_gorrila out行是* output *行(來自ipython)。 DataFrame是通過讀取上述問題中的csv來定義的,但您自己可以工作。 –