【问题标题】:Drop rows depending on conditions in two or more columns根据两列或多列中的条件删除行
【发布时间】:2020-03-13 15:01:01
【问题描述】:

我是编程新手,所以请原谅我的无知。

我有以下数据框:

          ID      Name    
0       AJ-6      Mark    
1       AJ-6      Mark     
2    AJ-6-FR    Judith    
3    AJ-6-FR    Judith  
4    AJ-6-FR Christian    
..       ...       ...   
299   TV-552     Marie   
300   TV-552      Ruth     
309  ZS-V-21      John     
310  ZS-V-21      John     
311  ZS-V-21      John    

我的意图是删除那些重复 ID 的行(即行 0 - 1 或 309-311)并且行中有相同的名称。

我尝试了很多方法,例如使用带有移位列的迭代和条件,但恐怕在迭代时无法删除多行。

我只显示了可以找到条件的两列,但可能还有更多(即 if column ['age'] >= 20: drop rows)。

感谢您的帮助先生和女士们。

【问题讨论】:

    标签: dataframe iteration drop


    【解决方案1】:

    你可以试试

    df = df.loc[(df['ID']!=df['shiftdown'])&(df['ID']!=df['shiftup'])]
    

    仅当 ID 值与 shiftdown 和 shiftup 不同时才检查并保留行。

    如果您只是想根据特定列删除具有相同值的行,您可以使用 df.drop_values(by=[col_name]),问题并不清楚。

    【讨论】:

    • 亲爱的爱德华多。非常感谢您的意见。我试图将您的解决方案应用于我的问题,但我意识到我的问题比我预期的要复杂一些。我最终决定重新制定它。带来不便敬请谅解。我希望你能帮助我。
    • 我认为,如果您要应用多个彼此真正不同的条件,则执行更多“清理”步骤可能比将所有内容浓缩在一行代码中更简单。考虑为每个条件赋予什么优先级(您是要先按年龄过滤还是先检查重复项?)。另外,请查看下面的链接,它包含您可以为您的代码复制的代码示例。如果不确切知道您的输出应该看起来很难提供比pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html 更多的帮助
    【解决方案2】:

    你可以试试这个(如果df是你的DataFrame):

    df.drop_duplicates(subset = ['ID', 'Name'], inplace = True) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 2021-03-20
      • 2023-02-14
      • 2021-06-01
      相关资源
      最近更新 更多