【问题标题】:Groupby and find top 10% of records per group in a Pandas DataFrameGroupby 并在 Pandas DataFrame 中查找每组前 10% 的记录
【发布时间】:2019-02-20 22:31:50
【问题描述】:

我正在尝试创建一个新的 DataFrame,其中包含每组前 10% 的计数记录。

初始df的例子如下;

date        name       count
2014-12-14  Jerry      1
2014-12-21  Jerry      2
2015-01-11  Jerry      3
2015-02-01  Jerry      4
2015-02-08  Jerry      5
2015-03-01  Jerry      6
2015-03-08  Jerry      7
2015-03-15  Jerry      8
2015-03-22  Jerry      9
2015-04-26  Jerry      10
2014-12-14  Tom        1
2014-12-21  Tom        2
2015-01-11  Tom        3
2015-02-01  Tom        4
2015-02-08  Tom        5
2015-03-01  Tom        6
2015-03-08  Tom        7
2015-03-15  Tom        8
2015-03-22  Tom        9
2015-04-26  Tom        10

上面的 DataFrame 只是完整 DataFrame 的一个 sn-p,它包含许多名称,并且在一年内每个名称包含每周 count 信息。

我想要的输出如下。

date        name       count
2015-04-26  Jerry      10
2015-04-26  Tom        10

如有任何帮助,我将不胜感激。

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    首先是 sort_values,然后是 groupby,使用自定义 lambda 函数按组按行获取 10%

    df1 = (df.sort_values(['name','count'], ascending=[True, False])
             .groupby('name', group_keys=False)
             .apply(lambda x: x.head(int(len(x) / 10))))
    print (df1)
              date   name  count
    9   2015-04-26  Jerry     10
    19  2015-04-26    Tom     10
    

    【讨论】:

    • @jerzrael 非常感谢它的魅力。要获得底部10%,我是否只需将x.head 更改为x.tail
    • @moe_95 - 是的,完全正确。
    猜你喜欢
    • 1970-01-01
    • 2013-04-24
    • 2021-02-21
    • 1970-01-01
    • 2023-01-23
    • 2016-01-25
    • 2014-10-17
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多