【发布时间】:2018-10-12 00:50:42
【问题描述】:
请原谅我的标题;我很难总结一个复杂的问题。
我有一个看起来像这样的值的 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”分割每一列,将最后一段转换为整数列表,取最小值,然后将最小值与阈值进行比较,最后删除整数列表,但我被困在令人作呕的嵌套列表理解中:
[[[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.x list pandas dataframe filter