Написание аналогичной pandas функции на numpy - PullRequest
0 голосов
/ 03 апреля 2020

Когда я использую pandas фрейм данных, мне обычно нужно выполнить эту операцию:

x.eq(0).sum()/((x.eq(0)&x.shift().ne(0)).sum())

Однако мне нужно работать с массивами и выполнять ту же функцию.

Я заметил, что:

x.eq(0).sum()

Можно записать так в numpy:

np.count_nonzero(x == 0)

Эта вторая часть ((x.eq(0)&x.shift().ne(0)).sum()), я не знаю, какая функция numpy заменяет shift().

Как написать эту функцию ((x.eq(0)&x.shift().ne(0)).sum()) на numpy?

1 Ответ

0 голосов
/ 03 апреля 2020

IIU C:

Идея сдвига исходит из элементов сдвига в массиве numpy

from scipy.ndimage.interpolation import shift

x.eq(0) -> x==0
x.shift() -> shift(x, 1, cval=1)
x.ne(0) -> x!=0

И, таким образом:

((x.eq(0)&x.shift().ne(0)).sum()) -> np.sum(np.logical_and((x==0),shift(x, 1, cval=np.nan)!=0))

Наконец:

x.eq(0).sum()/((x.eq(0)&x.shift().ne(0)).sum()) -> np.count_nonzero(x == 0)/np.sum(np.logical_and((x==0),shift(x, 1, cval=1)!=0))

Но если бы я был там, где вы, я бы просто сделал:

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