有没有一种方法可以根据条件从基准框中删除行



你好,我有一个数据帧:

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

如果name包含lastname(即lastname在name中(,我只想保留行

在我们的情况下,我们只保留:

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

因为DORTMINEX在马里兰州ALEXIA DORTMINEX

thnks

您可以使用apply和切片:

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

输出:

name  id firstname   lastname
0  MD ALEXIA DORTMINEX   1    ALEXIA  DORTMINEX

您可以使用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

您可以使用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

最新更新