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

9

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

这是一个示例数据框:

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

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


你能提供一些代码来说明为什么在你的情况下会出现错误吗?我的经验是,在 Pandas 中进行 groupby 后,新的数据框架 原始未分组的数据框架的顺序是相同的。如果你能提供一小段构建玩具数据框架、执行分组并显示问题的代码,那将非常有帮助。 - ely
如果您只需要按相同顺序获取列中唯一值的列表,为什么不直接使用以下代码:df.c1.unique(),其中c1是您想要获取唯一值的列名。 - Zelazny7
1个回答

11

如评论中所述,您可以在列上使用unique,它将保留顺序(不像numpy的unique,它不会排序):

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    

当我尝试使用上面的例子时,我得到了“array未定义”的错误。它在哪里被定义了吗? - Rohit
@aging_gorrila 这些轮廓是 输出 行(来自 ipython)。DataFrame 是通过读取上面问题中的 csv 定义的,但您自己的也可以。 - Andy Hayden
1
array 简单地指的是 Pandas 用来存储数据的底层 NumPy ndarray (np.ndarray)。 - craymichael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接