有没有一种方法可以根据条件从数据框中删除行?
Posted
技术标签:
【中文标题】有没有一种方法可以根据条件从数据框中删除行?【英文标题】: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 中
谢谢
【问题讨论】:
这能回答你的问题吗? How do I select rows from a DataFrame based on column values? 【参考方案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
【讨论】:
以上是关于有没有一种方法可以根据条件从数据框中删除行?的主要内容,如果未能解决你的问题,请参考以下文章