python - 保留 pandas df 的行在给定列中包含给定列表中的子字符串

标签 python pandas dataframe

我有一个 pandas df,其中包含 NAME 列和 AGE 列。 我得到了一系列名称,我只想保留 df 中 NAME 列具有该系列中的一个名称的行。此外,该系列在 df 中可能没有全名,而只有部分名称(例如只有名字或姓氏)。

示例:

df = NAME           AGE
     John Stewart    26
     Mary Doe        36
     Luke Doe        29
     Danny Smith     16
     Jenny Brown     80

series s (or list) = [Luke, Danny]

我想要

df2 = NAME           AGE
      Luke Doe        29
      Danny Smith     16

我正在尝试一些(非常麻烦),例如:

df["KEEP"] = None
print (len(df.index))
for i in range(len(df.index)) :
    for name in s:
        row = df.iloc[i]
        if name in row["NAME"]:
            df["KEEP"][i] = True
            break
        df["KEEP"][i] = False

return df[myData["KEEP"]==True]

我知道这很尴尬,而且,它不起作用(额外的问题,超慢,但我不知道为什么)。 我该如何解决这个问题?

This如果 s 只有一个元素,则回答该情况,但我无法使其适应我的情况。

最佳答案

您可以尝试这种正则表达式方法:

names = ['Luke', 'Danny']

df[df.NAME.str.contains("|".join(names))]

#          NAME AGE
#2     Luke Doe  29
#3  Danny Smith  16

这里使用"|".join(names)创建一个模式:

"|".join(names)
# 'Luke|Danny'

然后使用str.contains检查名称中是否有一个子字符串。

如果您需要忽略大小写,请将flags参数与re.IGNORECASE结合使用:

import re
df[df.NAME.str.contains("|".join(names), flags=re.IGNORECASE)]

关于python - 保留 pandas df 的行在给定列中包含给定列表中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43195049/

相关文章:

Python Matplotlib – 在 x 轴上代表采样位置的条形图

python - Pandas - 提取以特定字符开头的字符串

python - 在Python中对值进行分组和划分

python - 'ReverseManyToOneDescriptor' 对象没有属性 'all'

python - 如何在 Tensorflow 2.0 数据集中动态更改批量大小?

python - 使用两个变量优化 cumprod()

python - Pandas - 排序并进入 groupby

python - Jinja 2 - Django 表单 : rendering encodes HTML

python - Numpy 数组改变 id

python - 当列是一系列列表时,如何有条件地添加到 pandas 数据框列中的单元格选择?