【问题标题】:Drop all rows that meet condition except the first one删除除第一行之外的所有满足条件的行
【发布时间】:2020-07-09 17:44:04
【问题描述】:

我想删除 pandas 数据帧中除第一行之外满足特定条件的所有行。请注意,行不相同,所以我不能使用drop_duplicates()

例如,如果我有数据框:

Type    Count
A           4
X          33
X           5
E          51
Y           7

我想过滤条件:df[df.Type.isin(['X', 'Y'])] 将删除类型为XY 的所有行,结果:

Type    Count
A           4
E          51

但我想保留满足条件的第一个匹配项,使得结果是:

Type    Count
A           4
X          33
E          51

任何建议将不胜感激。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我们可以将第一个值设置为Falseidxmax

    m = df.Type.isin(['X', 'Y'])
    m.loc[m.idxmax()] = False
    df[~m]
    
      Type  Count
    0    A      4
    1    X     33
    3    E     51
    

    【讨论】:

    • 感谢优雅的解决方案!
    【解决方案2】:

    试试:

    import numpy as np
    
    df['k']=np.where(df['Type'].isin(['X', 'Y']), 'x', np.arange(len(df)))
    
    res=df.drop_duplicates(subset='k').drop('k', axis=1)
    

    输出:

    >>> res
    
      Type Count
    0    A     4
    1    X    33
    3    E    51
    

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 2016-12-04
      • 1970-01-01
      • 2010-09-27
      • 2018-03-20
      • 2021-12-26
      • 2019-02-13
      • 1970-01-01
      • 2017-09-27
      相关资源
      最近更新 更多