Пожалуйста, прости меня за название; Мне было трудно подвести итог сложному вопросу.
У меня есть pandas dataframe значений, который выглядит следующим образом:
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('')