Есть ли в пандах эквивалент формулы Excel? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть набор данных временного ряда, и мне нужно найти разницу в моем поле для каждого тика.

В Excel я могу легко это сделать, написав формулу B2 = A2-A1 и скопировав эту формулу по всему столбцу B

пример:

enter image description here

Есть ли простой способ сделать это с пандами?

Я рассмотрел apply (), но похоже, что он может работать только на 1 элементе серии

Мой другой вариант - создать массив Numpy из моего столбца A и запустить его через цикл.Однако это кажется окольным путем и становится еще более сложным, если мне нужно ссылаться на элементы из разных

Фактическая формула Excel, которую мне нужно перевести, это = IF ((A3-A2)> 0, (A3-A2), A3 + (4294967296-A2))

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Вот как я решил свою проблему сейчас, используя numpy

(перевод формулы Excel = IF ((A3-A2)> 0, (A3-A2), A3 + (2 ** 32-A2)))

s1=np.array(df[0])
s=s1[1:]-s1[0:-1]
s[s<0]=s[s<0]+(2**32)

Я чувствую, что в пандах может быть более элегантное решение этой проблемы.Может быть, если df.diff () может принимать лямбда-параметр?

0 голосов
/ 26 апреля 2018

Это может помочь.Я не проверял: для этого, пожалуйста, предоставьте некоторые данные (в текстовом виде) с желаемым выводом.

df[1] = np.where(df[0].diff() > 0, df[0].diff(), df[0].shift() + 2**32 - df[0])
0 голосов
/ 26 апреля 2018

Чтобы получить лаговую разницу в серии, используйте

df['my_column'].diff()

Вы также можете указать задержку, если хотите сделать что-то отличное от 1.

См. документацию для получения дополнительной информации


РЕДАКТИРОВАТЬ Вот возможный способ обратиться к вашей формуле:

df = pd.DataFrame({'A': [20, 22, 25, 43, 23, 45, 67, 50, 70]})
df['result'] = df['A'].diff()
df['result'][ df['result'] < 0 ] += 2**32  # you can disregard the pandas warning

На основеПо вашей логике вы можете просто взять diff и, если результат меньше нуля, добавить константу 2**32.И это должно быть немного эффективнее, чем несколько раз проходить различие (хотя, вероятно, это не большая проблема).

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