Pandas:迭代已经按排序顺序排列的列的唯一值

时间:2013-12-18 17:48:11

标签: python group-by pandas

我已经按照排序顺序构建了一个pandas数据框,并希望迭代具有相同特定列值的组。在我看来,groupby功能对此很有用,但据我所知,执行groupby并不能保证密钥的顺序。如何按排序顺序提取unqiue列值。

以下是一个示例数据框:

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

我想要一个列表[" Foo"," Bar"],其中订单由原始数据帧的顺序保证。然后我可以使用此列表来提取适当的行。在我的情况下,排序实际上是由数据框中给出的列(未包含在上面的示例中)定义的,因此如果无法直接提取信息,则可以接受重新排序的解决方案。

1 个答案:

答案 0 :(得分:5)

如评论中所述,您可以在列上使用unique来保留订单(与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