Выберите подмножества данных на основе значения столбца - PullRequest
0 голосов
/ 03 мая 2018

У меня есть DataFrame в следующей структуре:
df

   12     14   15   16    18   29    31   32   33    36    46    48   49   50   52
0  0   1950  136  -25  -116    1  1664  372  -17   NaN     1  2950  449  -24  NaN
1  0   1635  373  -21  -115    0  1639  261  -24  -116     1  2950  160  -24  NaN
1  0   1635  373  -21  -115    1  1639  261  -24   NaN     1  2950  160  -24 -111

в столбцах 12, 29 и 46 у меня есть показатели 0 или 1 Я назвал этот список индексов: col = [12,29,46] Моя цель - найти правильный синтаксис в Python, чтобы закодировать это:

for i in col: 
    check df[i] 
    while df[i] == 0 and df [i+6] is not NaN:
        select df[i+2] , df[i+3] , df[i+4]
    while df[i] == 1 and df [i+6] is not NaN:
        select df[i+2] , df[i+3] , df[i+4]
    if df[i] == 1 and all df[i+6] are NaN:
    Select the first one.

1 Ответ

0 голосов
/ 03 мая 2018

Не зная слишком много о деталях фреймов данных Panda, я бы сказал, что вы должны решить эту проблему в целом. Если вы хотите создать свою собственную реализацию, вы должны создать функцию фильтра, которой вы передаете два аргумента: ваш фрейм данных и предикатная функция (функция, которую вы должны написать, которая будет возвращать True или False для строка данных).

Что-то вроде:

def my_test_function(row):
    ....
    # result must be boolean (or something equivalent)
    return result

def filter_dataframe(df, predicate):
   return [row for row in df.rows if predicate(row)]

rows = filter_dataframe(df, my_test_function)

Следовательно, вы должны написать my_test_function в соответствии с вашими потребностями.

Также обратите внимание, что Panda предоставляет целый набор средств для фильтрации ( см., В частности, эту страницу ). Но если это не соответствует вашим потребностям, приведенный выше шаблон может быть элегантным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...