pandas - вычисление векторизованной формулы с помощью nans - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть DataFrame (называемый signal), который представляет собой простую серию времени с 5 столбцами. Вот как выглядит .describe():

                ES           NK           NQ           YM
count  5294.000000  6673.000000  4798.000000  3415.000000
mean     -0.000340     0.000074    -0.000075    -0.000420
std       0.016726     0.018401     0.023868     0.015399
min      -0.118724    -0.156342    -0.144667    -0.103101
25%      -0.008862    -0.010297    -0.011481    -0.008162
50%      -0.001422    -0.000590    -0.001747    -0.001324
75%       0.007069     0.009163     0.009841     0.006304
max       0.156365     0.192686     0.181245     0.132630

Я хочу применить простую функцию к каждой строке и получить обратно матрицу с такими же размерами:

weights = -2*signal.subtract( signal.mean(axis=1), axis=0).divide( signal.sub( signal.mean(axis=1), axis=0).abs().sum(axis=1), axis=0 )

Однако, когда я запускаю эту строку, программа застревает. Я считаю, что эта проблема возникает из-за разницы в длине / наличии нанс. Отбрасывать nans / заполнять его нельзя, для любой строки, в которой есть nan, я хочу, чтобы nan был просто исключен из вычисления. Временным решением было бы сделать это итеративно, используя .iterrows(), но это неэффективное решение.

Есть ли разумные решения этой проблемы?

1 Ответ

0 голосов
/ 10 ноября 2018

Дело в том, что методы панд mean и sum уже исключают значения NaN по умолчанию (см. Описание ключевого слова skipna в связанном документы). Кроме того, subtract и divide позволяют использовать ключевое слово fill_value arg:

fill_value: нет или значение с плавающей запятой, по умолчанию нет

Заполните существующие значения (NaN) и любой новый элемент, необходимый для успешного выравнивания DataFrame, этим значением до вычисления. Если данные в обоих соответствующих местоположениях DataFrame отсутствуют, результат будет отсутствовать

Таким образом, вы можете получить желаемое, установив fill_value=0 в вызовах на subtract и fill_value=1 в вызовах на divide.

Однако я подозреваю, что поведение по умолчанию (NaN игнорируется в mean и sum, NaN - anything = NaN, NaN\anything = NaN) - это то, что вам действительно нужно. В этом случае ваша проблема не имеет прямого отношения к NaN s, и вам придется уточнить ваше утверждение «когда я запускаю эту строку, программа застревает», чтобы получить полезный ответ.

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