Pandas groupby:获取知道其 id 的组的大小(来自 .grouper.group_info[0])

Posted

技术标签:

【中文标题】Pandas groupby:获取知道其 id 的组的大小(来自 .grouper.group_info[0])【英文标题】:Pandas groupby: get size of a group knowing its id (from .grouper.group_info[0]) 【发布时间】:2013-07-30 11:52:48 【问题描述】:

在下面的 sn-p 中,datapandas.DataFrameindicesdata 的一组列。使用groupby 对数据进行分组后,我对组的 id 感兴趣,但只对大小大于阈值(例如:3)的组感兴趣。

group_ids=data.groupby(list(data.columns[list(indices)])).grouper.group_info[0]

现在,我如何知道哪个组的 id 大于或等于 3?我只想要特定大小的组的 ID。

#TODO: filter out ids from group_ids which correspond to groups with sizes < 3 

【问题讨论】:

这是 Kaggle 的亚马逊员工访问挑战,对 =)) 是的,没错。这是一个很小的世界,艾丽莎,不是吗? ;) 【参考方案1】:

一种方法是使用groupbysize方法:

g = data.groupby(...)
size = g.size()
size[size > 3]

比如这里只有一组size > 1:

In [11]: df = pd.DataFrame([[1, 2], [3, 4], [1,6]], columns=['A', 'B'])

In [12]: df
Out[12]:
   A  B
0  1  2
1  3  4
2  1  6 

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

In [14]: size = g.size()

In [15]: size[size > 1]
Out[15]:
A
1    2
dtype: int64

如果您只想将 DataFrame 限制在大组中,您可以使用 filter 方法:

In [21]: g.filter(lambda x: len(x) > 1)
Out[21]:
   A  B
0  1  2
2  1  6

【讨论】:

谢谢。我尝试了g.filter(lambda x: len(x) &gt; 1),但它对我不起作用,我遇到了一个例外。现在我正在尝试g.filter(g.size() &gt;= threshold)。它没有立即失败,这是一个好兆头,但它很慢......我在大约 10 分钟前启动它,它仍在运行......我有大约 90000 个组(没有过滤)。 @piokuc 过滤器需要 0.12(不要认为 g.filter(g.size() &gt;= threshold) 做你认为它做的事情......:s) 非常感谢安迪。是的,我不相信g.filter(g.size() &gt;= threshold) 会做我想做的事,因为它需要的时间太长(它仍在运行......需要杀死它)。我需要检查我正在使用的 pandas 的版本... 所以,我升级了我的熊猫,现在是 0.12.0。不幸的是,它再次失败,但错误信息现在不同了。以前是关于 lambda 不可迭代的问题,如果我没记错的话,现在是:` File "pplr.py", line 59, in group_data g.filter(lambda x: len(x) >= threshold) File "/ var/tmp/SKL/lib/python2.7/site-packages/pandas/core/groupby.py”,第 2094 行,在过滤器中如果 res:ValueError:具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all()` 有什么想法吗? 非常感谢您的努力。我希望你不介意另一个问题:你知道如何使用组 id(取自 df.groupby(...).grouper.group_info[0])来获取相应的组,其中一个在 (df.groupby(...).grouper.groups) 中可用很聪明,我可以一个一个循环完成。

以上是关于Pandas groupby:获取知道其 id 的组的大小(来自 .grouper.group_info[0])的主要内容,如果未能解决你的问题,请参考以下文章

Groupby 和 Aggregate 以列表为元素的 pandas 列,并在列表中获取唯一值

Pandas groupby agg - 如何获得计数?

df.groupby('id').resample('D').last() 在 Pandas 中的 Pyspark 等效项

groupby pandas dataframe 同时按日期和 id

应用 groupby 后从组中获取特定元素-PANDAS [重复]

Pandas - Groupby 多索引级别,获取可能的组合,然后转换数据