【问题标题】:is there a method to delete rows from datframe based on condition?有没有一种方法可以根据条件从数据框中删除行?
【发布时间】:2022-01-20 11:44:51
【问题描述】:

你好,我有一个数据框:

name; id ; firstname ;lastname
MD ALEXIA DORTMINEX ; 1; ALEXIA ; DORTMINEX
DOC PAULO RODRIGEZ ; 3 ; PAOLO ; SANCHEZ

如果名称包含姓氏(即姓氏在名称中),我只想保留行

在我们的例子中,我们只保留:

name; id ; firstname ;lastname
MD ALEXIA DORTMINEX ; 1; ALEXIA ; DORTMINEX

因为 DORTMINEX 在 MD ALEXIA DORTMINEX 中

谢谢

【问题讨论】:

标签: python-3.x pandas dataframe


【解决方案1】:

您可以使用apply 和切片:

df[df.apply(lambda r: r['lastname'] in r['name'], axis=1)]

输出:

                  name  id firstname   lastname
0  MD ALEXIA DORTMINEX   1    ALEXIA  DORTMINEX

【讨论】:

    【解决方案2】:

    您可以使用list 推导式检查您的姓氏列是否包含您的姓名列,该推导式将返回一个布尔值 (True / False)。将其放在loc 中将使用生成的布尔值过滤您的数据框,这将为您提供所需的内容:

    >>> [name[0] in name[1] for name in zip(df['lastname'], df['name'])]
    
    [True, False]
    

    >>> df.loc[[name[0] in name[1] for name in zip(df['lastname'], df['name'])]]
    
                       name   id   firstname     lastname
    0  MD ALEXIA DORTMINEX      1     ALEXIA    DORTMINEX
    

    【讨论】:

      【解决方案3】:

      您可以使用apply() 函数检查姓氏在名称中的每一行,然后使用此掩码过滤您的数据。

      如下:

      mask = df.apply(lambda x: x['lastname'] in x['name'], axis=1)
      df = df[mask]
      

      这将输出:

                         name   id   firstname     lastname
      0  MD ALEXIA DORTMINEX      1     ALEXIA    DORTMINEX
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        • 2019-07-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多