【问题标题】:Groupby Pandas dataframe and drop values conditionally based on rankGroupby Pandas 数据框并根据排名有条件地丢弃值
【发布时间】:2018-06-01 10:09:38
【问题描述】:

我有一个这样的数据框:

Col1 | Col2 | Col3
 a   |   8  |  9
 a   |   3  |  7
 a   |   1  |  3
 a   |   0  |  8
 b   |   6  |  18
 b   |   2  |  6

如果可能的话,我想通过对 Col1 进行分组来删除除 Col2 的第 2 和第 3 个最高值之外的所有内容

所需的输出:

Col1 | Col2 | Col3
 a   |   3  |  7
 a   |   1  |  3
 b   |   2  |  6

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    可以使用cumcount

    df[df.groupby('Col1').cumcount().isin([1,2])]
    Out[423]: 
      Col1  Col2  Col3
    1    a     2     7
    2    a     1     3
    5    b     2     6
    

    更多信息:

    df.groupby('Col1').cumcount()
    Out[435]: 
    0    0
    1    1
    2    2
    3    3
    4    0
    5    1
    dtype: int64
    

    【讨论】:

    • 这些是示例数字,并不具有代表性。但如果我可以创建基于 Col1 的顺序列,它可能会起作用!
    • 查看编辑。第二个和第三个值不会总是有值 1 和 2
    • @NBC 人,你真的错过了理解,我的解决方案,1、2 来自 cumcount 而不是你的数据框
    猜你喜欢
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多