我已经按照排序顺序构建了一个pandas数据框,并希望迭代具有相同特定列值的组。在我看来,groupby功能对此很有用,但据我所知,执行groupby并不能保证密钥的顺序。如何按排序顺序提取unqiue列值。
以下是一个示例数据框:
Foo,1
Foo,2
Bar,2
Bar,1
我想要一个列表[" Foo"," Bar"],其中订单由原始数据帧的顺序保证。然后我可以使用此列表来提取适当的行。在我的情况下,排序实际上是由数据框中给出的列(未包含在上面的示例中)定义的,因此如果无法直接提取信息,则可以接受重新排序的解决方案。
答案 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