【问题标题】:Python / Pandas: Dataframe subset by filter criteriaPython / Pandas:按过滤条件划分的数据框子集
【发布时间】:2018-07-02 17:49:46
【问题描述】:

我有以下数据框,它是比赛和结果的列表。

      Date       R   #   Fin  Win
0     11182017   1   1   2     0 
1     11182017   1   2   1     5   
2     11182017   1   3   3     0   
3     11182017   2   1   2     0   
4     11182017   2   2   1     10   
5     11182017   3   1   1     6    
6     11182017   3   2   2     0   

我只想返回 Win 列大于或等于 10 的比赛(所有参赛者,而不仅仅是 10 的行)。示例如下

      Date       R   #   Fin  Win
3     11182017   2   1   2     0   
4     11182017   2   2   1     10   

【问题讨论】:

    标签: python pandas dataframe filter


    【解决方案1】:

    你可以使用groupby + filter

    df.groupby(['Date','R']).filter(lambda x : (x['Win']>=10).any())
    Out[568]: 
           Date  R  #  Fin  Win
    3  11182017  2  1    2    0
    4  11182017  2  2    1   10
    

    使用transform的另一种解决方案

    df[df.groupby(['Date','R']).Win.transform(lambda x : (x>=10).any())]
    Out[573]: 
           Date  R  #  Fin  Win
    3  11182017  2  1    2    0
    4  11182017  2  2    1   10
    

    【讨论】:

    • 文,TY 的快速响应......你能解释一下代码的机制吗? df.groupby(['Date','R']).filter(lambda x : (x['Win']>=10).any())
    • @Derek 它按 Date 和 R 分组,为组内的所有 Win 找到不小于 10 的任何值,如果其中任何一个匹配,则全部保留,否则丢弃它
    • @Derek 如果这是你需要的,你能考虑接受吗?
    猜你喜欢
    • 2017-12-15
    • 2017-05-26
    • 2016-11-04
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    相关资源
    最近更新 更多