Context
Я работаю над DataFrame df
с множеством столбцов, заполненных числовыми значениями
df
lorem ipsum | dolor sic | ... | (hundreds of cols)
---------------------------------------------------------
0.5 | -6.2 | ... | 79.8
-26.1 | 6200.0 | ... | -65.2
150.0 | 3.14 | ... | 1.008
Другими словами, у меня есть list_cols
столбцов:
list_cols = ['lorem ipsum', 'dolor sic', ... ] # arbitrary length, of course len(list_cols ) <= len(df.columns), and contains valid columns of my df
Я хочу получить 2 кадра данных:
- 1, который содержит все строки, где
value < 0
хотя бы для одного из list_cols
(соответствует OR
),давайте назовем это negative_values_matches
- 1, что соответствует оставшемуся кадру данных, назовем его
positive_values_matches
Пример ожидаемого результата
для list_cols = ['lorem ipsum', 'dolor sic']
, я получу кадры данных, в которых хотя бы 1 значение в list_cols строго отрицательно:
negative_values_matches
lorem ipsum | dolor sic | ... | (hundreds of cols)
---------------------------------------------------------
0.5 | -6.2 | ... | 79.8
-26.1 | 6200.0 | ... | -65.2
positive_values_matches
lorem ipsum | dolor sic | ... | (hundreds of cols)
---------------------------------------------------------
150.0 | 3.14 | ... | 1.008
Я не хочу писать myslef такого рода код:
negative_values_matches = df[ (criterion1 | criterion2 | ... | criterionn)]
positive_values_matches = df[~(criterion1 | criterion2 | ... | criterionn)]
(где criterionk
- логическое вычисление для столбца k
, например: (df[col_k]>=0)
, здесь подразумевается скобка, так как используется синтаксис Pandas)
Идея состоит в том, чтобы иметь программный подход.Я в основном ищу массив логических значений, поэтому я могу затем использовать логическое индексирование (см. Документация Pandas ).
Насколько я могу судить, этисообщения не точно о чем я говорю:
Я не могу понять,как связать логические вычисления на моем DataFrame вместе с оператором OR
и получить правильное разбиение строк.
Что я могу сделать?