首页 > 解决方案 > Groupby 3列,每组只保留最小的5列

问题描述

首先,对不起,我不是英语本地人,但我希望你能理解我的问题;-)

我有一份来自与我合作的有线电视网络提供商的数据列表。

我已将这些信息分组

traffic.groupby(["HUB","FIBER_NODES","WEEK"])

这很好用,我正在获取每个 HUB-NODES-WEEK 组的所有信息。但现在我想检查交通发展。为此,我想获得此数据框中第一周和最后 5 周的平均值之间的差异。

为此,我不想将日历周保留在 1 到 38 之间。我只想保留 1 到 5 或 34 到 38。

我试过了:

traffic.groupby(["HUB","FIBER_NODES","WEEK"]).nlargest(5)

错误:AttributeError:无法访问“DataFrameGroupBy”对象的可调用属性“nlargest”,请尝试使用“apply”方法

下次尝试:

traffic.groupby(["HUB","FIBER_NODES","WEEK"]).apply(lambda grp: grp.nlargest(5,"WEEK"))

这没有用,我仍然有从 1 到 38 的所有时间。

有人知道我接下来可以尝试什么吗?;-)

非常感谢

马可

标签: pythonpandas

解决方案


我认为评论中的@jon-clements 有正确的想法。问题是您包含"WEEK"在 groupby 中。删除它对我有用(在不同的数据上):

traffic.groupby(["HUB","FIBER_NODES"]).apply(lambda grp: grp.nlargest(5,"WEEK"))

(我也希望nlargest能工作,但显然它还没有为 DataFrame groupbys 实现。:-/)


推荐阅读