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 中,data
是 pandas.DataFrame
,indices
是 data
的一组列。使用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】:一种方法是使用groupby
的size
方法:
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) > 1)
,但它对我不起作用,我遇到了一个例外。现在我正在尝试g.filter(g.size() >= threshold)
。它没有立即失败,这是一个好兆头,但它很慢......我在大约 10 分钟前启动它,它仍在运行......我有大约 90000 个组(没有过滤)。
@piokuc 过滤器需要 0.12(不要认为 g.filter(g.size() >= threshold)
做你认为它做的事情......:s)
非常感谢安迪。是的,我不相信g.filter(g.size() >= 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 列,并在列表中获取唯一值
df.groupby('id').resample('D').last() 在 Pandas 中的 Pyspark 等效项
groupby pandas dataframe 同时按日期和 id