繁体   English   中英

Python Pandas GroupBy 获取组列表

[英]Python Pandas GroupBy get list of groups

我有一行代码:

g = x.groupby('Color')

颜色是红色、蓝色、绿色、黄色、紫色、橙色和黑色。 我如何返回此列表? 对于类似的属性,我使用 x.Attribute 并且它工作正常,但 x.Color 的行为方式不同。

有更简单的方法:

g = x.groupby('Color')

g.groups.keys()

通过执行groupby() pandas 返回一个分组 DF 的字典。 您可以通过python内置的函数keys()轻松获取此字典的密钥列表。

如果你不关心组的顺序,Yanqi Ma 的回答会很好:

g = x.groupby('Color')
g.groups.keys()
list(g.groups) # or this

但是,请注意g.groups是一个字典,因此键本质上是无序的! 即使您在groupby方法上使用sort=True对组进行排序,情况也是如此,默认情况下为 true。

当它在两个平台上导致不同的顺序时,这实际上让我很难受,特别是因为我使用的是list(g.groups) ,所以一开始g.groups是一个dict并不明显。

在我看来,最好的方法是利用GroupBy 对象有一个 iterator的事实,并使用列表推导以它们在 GroupBy 对象中存在的顺序返回组:

g = x.groupby('Color')
groups = [name for name,unused_df in g]

它的可读性稍差,但这将始终以正确的顺序返回组。

据我了解,您有一个包含多个列的数据框。 其中一列是“颜色”,它具有不同类型的颜色。 您想要返回存在的唯一颜色列表。

colorGroups = df.groupby(['Color'])
for c in colorGroups.groups: 
    print c

上面的代码将为您提供所有存在的颜色,而无需重复颜色名称。 因此,您应该得到如下输出:

Red
Blue
Green
Yellow
Purple
Orange
Black

另一种方法是unique()函数,它返回一个系列中所有唯一值的数组。 因此,要获得所有唯一颜色的数组,您可以执行以下操作:

df['Color'].unique()

输出是一个数组,因此例如print df['Color'].unique()[3]会给你Yellow

这是如何做到的。

groups = list()
for g, data in x.groupby('Color'):
    print(g, data)
    groups.append(g)

这里的核心思想是:如果您通过迭代器对数据帧进行迭代,您将得到一个二元组(组名,过滤后的数据帧),其中过滤后的数据帧仅包含与该组对应的记录)。

我比较了上述解决方案的运行时间(与我的数据):

In [443]: d = df3.groupby("IND")

In [444]: %timeit groups = [name for name,unused_df in d]
377 ms ± 27.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [445]: % timeit  list(d.groups)
1.08 µs ± 47.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [446]: % timeit d.groups.keys()
708 ns ± 7.18 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [447]: % timeit df3['IND'].unique()
5.33 ms ± 128 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

似乎 'd.groups.keys()' 是最好的方法。

希望这有帮助..快乐编码:)

df = pd.DataFrame(data=[['red','1','1.5'],['blue','20','2.5'],['red','15','4']],columns=(['color','column1','column2']))

list_req = list(df.groupby('color').groups.keys())
print(list_req)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM