首页 > 解决方案 > Pandas:如果最后六个字符包含低于阈值的任何整数,则删除单元格

问题描述

请原谅我的标题;我很难总结一个复杂的问题。

我有一个值的熊猫数据框,如下所示:

    col1         col2            col3          col4       
10_Q999999   111_Q4987666    110_Q277778   111_Q999999

假设阈值为7。我需要获取该数据帧并删除_Q之后的任何数字低于阈值7的每个单元格。对于每个数字> = 7的单元格,我只想保留字符串的一部分在“_Q”之前。

所需的输出如下所示:

  col1            col2            col3          col4       
   10                                           111

我试图想办法用“_Q”分割每一列,将最后一段转换为整数列表,取最小值,然后将最小值与阈值进行比较,最后删除整数列表,但我m 陷入了令人作呕的嵌套列表理解的中间:

[[[int(z) for z in y[-3:] if (z != '') and "Q" not in z ] for y in chunk[x].astype(str).str.split("_") if y != ''] for x in chunk[cols] if x != '']

解决方案:

s=~chunk.apply(lambda x : 
x.str.split('_Q').str[1].str.contains('[0:6]', na=False))
        chunk = chunk.apply(lambda x : x.str.split('_Q').str[0])[s].fillna('')

标签: python-3.xlistpandasdataframefilter

解决方案


你可以split使用contains

s=~df.apply(lambda x : x.str.split('_Q').str[1].str.contains('1|2|3|4|5|6'))
df.apply(lambda x : x.str.split('_Q').str[0])[s].fillna('')
Out[549]: 
  col1 col2 col3 col4
0   10            111

推荐阅读