首页 > 解决方案 > 如何使用python根据列特定值从数据框中提取行

问题描述

目前,我有一个庞大的数据集,下面显示了一个非常小的样本。我想要做的是根据shift列提取行,​​并从score列中找到每个班次的最后 3 行的最大值,然后将整行提取到新的数据帧中。

在此处输入图像描述

例如:每天有两个班次(白天和晚上),对于每个班次,我想找到每个班次最后 3 行的最高分(例如:6 月 26 日,白班> ​​我想从白班的最后 3 个分数,6 月 26 日。我不想获取每个班次的最高分数并提取该行)并提取整行并将其设置为新的数据框。我想在两个班次的每一天都这样做。

预期的数据帧输出如下:

在此处输入图像描述

我尝试使用groupby解决这个问题。但我不知道如何从分数列中找到最大值,只考虑每个班次的最后 3 个分数值。考虑到整个班次的最高分,我这样做了。

标签: pythonpandasgroup-bypandas-groupby

解决方案


要获得最后 3 分,请使用groupbytail。要获得最大值,请对score和进行排序drop_duplicates

df.groupby(["Date", "Shift"]).tail(3)
  .sort_values("score")
  .drop_duplicates(["Date","Shift"], keep="last"))

推荐阅读