python - 如果所有列都包含特定模式,请选择 Pandas 数据框中的行

标签 python string pandas dataframe

我有以下数据框

id  pattern1    pattern2    pattern3
 1  a-b-c       a-b--       a-b-c
 2  a-a--       a-b--       a-c--
 3  a-v--       a-m--       a-k--
 4  a-b--       a-n--       a-n-c

我想过滤包含模式的行 -- 在所有列的末尾。 在这种情况下,输出将是

 2  a-a--       a-b--       a-c--
 3  a-v--       a-m--       a-k--

到目前为止我只能想到做类似下面的事情

df[(len(df['pattern1'].str.split('--')[1])==0) & \
   (len(df['pattern2'].str.split('--')[1])==0) & \
   (len(df['pattern3'].str.split('--')[1])==0)]

这行不通。另外,我不能写下所有列的名称,因为共有 20 列。 如何筛选行中所有列都匹配特定模式/条件的行?

最佳答案

如果尚未完成,请先将“id”设置为索引。

df = df.set_index('id')

检查每个字符串的一个选项是使用 applymap 调用 str.endswith:

df[df.applymap(lambda x: x.endswith('--')).all(1)]

   pattern1 pattern2 pattern3
id                           
2     a-a--    a-b--    a-c--
3     a-v--    a-m--    a-k--

另一个选项是 apply 为每一列调用 pd.Series.str.endswith:

df[df.apply(lambda x: x.str.endswith('--')).all(1)]

   pattern1 pattern2 pattern3
id                           
2     a-a--    a-b--    a-c--
3     a-v--    a-m--    a-k--

最后,为了提高性能,您可以使用 logical_and.reduce 在列表推导式中进行 AND 掩码:

# m = np.logical_and.reduce([df[c].str.endswith('--') for c in df.columns])
m = np.logical_and.reduce([
    [x.endswith('--') for x in df[c]] for c in df.columns])
m
# array([False,  True,  True, False])

df[m]
   pattern1 pattern2 pattern3
id                           
2     a-a--    a-b--    a-c--
3     a-v--    a-m--    a-k--

如果还有其他列,但您只想考虑那些名为“pattern*”的列,则可以在 DataFrame 上使用 filter:

u = df.filter(like='pattern')

现在使用 u 重复上面的选项,例如,第一个选项将是

df[u.applymap(lambda x: x.endswith('--')).all(1)]

...等等。

关于python - 如果所有列都包含特定模式,请选择 Pandas 数据框中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54209868/

相关文章:

python - 如何仅将 pyflakes 检查与 pep8 一起使用(从不进行样式检查)?

c++: string.replace 插入太多字符

java - java中的instanceof在嵌套数组列表上

python - 为什么 %config 行在 Python 3.7 中给出语法错误?

python - 如何根据特定顺序对 pandas 列进行排序?

Python - 通过 JSON 发送文件

python - Django - 为 ModelForm 中的字段分配默认值

python - pandas 中将字符串插入数据帧的 set_value 相当于什么

ruby - Ruby 字符串中的自定义 + 方法

python - 重新索引数据框 Pandas