【问题标题】:Pandas groupby year filtering the dataframe by n largest valuesPandas groupby year 按 n 个最大值过滤数据框
【发布时间】:2019-12-12 03:12:23
【问题描述】:

我有一个每小时级别的数据框,其中包含几列。我想在我的数据框中每年提取特定列的 10 个最高值的整行(包含所有列)。

到目前为止,我运行了以下代码:

df = df.groupby([df.index.year])['totaldemand'].apply(lambda grp: grp.nlargest(10)))

这里的问题是,我只获得该特定列每年的前 10 个值,而我丢失了其他列。如何执行此操作并让其他列的相应值对应于我的“总需求”列每年的前 10 个值?

【问题讨论】:

  • 您可以发布具有预期输出的示例数据集吗?

标签: pandas filtering pandas-groupby


【解决方案1】:

我们通常在sort_values之后做head

df = df.sort_values('totaldemand',ascending = False).groupby([df.index.year])['totaldemand'].head(10)

【讨论】:

    【解决方案2】:

    nlargest 可以应用于每个组,通过列来查找 最大值。

    所以运行:

    df.groupby([df.index.year]).apply(lambda grp: grp.nlargest(3, 'totaldemand'))
    

    当然,在最终版本中将 3 替换为您的实际值。

    【讨论】:

      【解决方案3】:

      获取查询的索引并将其用作原始df 的掩码:

      idx = df.groupby([df.index.year])['totaldemand'].apply(lambda grp: grp.nlargest(10))).index.to_list()
      df.iloc[idx,]
      

      (或类似的东西,没有任何测试数据我现在无法测试)

      【讨论】:

        猜你喜欢
        • 2017-07-12
        • 2021-08-26
        • 2021-08-01
        • 1970-01-01
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        • 2020-02-28
        • 2022-11-18
        相关资源
        最近更新 更多