按3列分组,每组只保留最小的5列

2024-05-16 00:41:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个列表,上面有我合作的有线网络提供商的数据。你知道吗

我把这些信息按

traffic.groupby(["HUB","FIBER_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周的时间。你知道吗

有人知道我下一步可以尝试什么吗?;—)

非常感谢

马可


Tags: 数据网络信息列表hub提供商nodesapply
2条回答

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

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

(我也希望nlargest可以工作,但显然它还没有在dataframegroupby中实现。:-/)

谢谢你的回答。你知道吗

我找到了一个非常有效的解决方案:

start_df = traffic.loc[(traffic["WEEK"] < min_week) & (traffic["STREAM_TYPE"] == str_type)].groupby(["HUB","FIBER_NODES"]).median()[["AVG_ACTIVE_CMS","AvgVal"]].reset_index()

祝你在新的一周有个好的开始。 马可

相关问题 更多 >