Как я могу применить вычисления на уровне строк в Dataframe? - PullRequest
2 голосов
/ 19 апреля 2020

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

Например, я бы хотел, чтобы строка 2 этого набора данных предсказывала прогноз: 9 * Лаг: 0,2 + остаток (из строки 1): 0,7 = 2,5

В то время как строка 3 все еще должна вычислять прогноз : 6 * Lag: 1.2 = 7.2 (потому что код магазина больше не 100)

Каков наилучший подход для достижения этой цели? Большое спасибо.

import pandas as pd
import numpy as np

data = [{'store':100, 'Forecast':11, 'Lag':0.7}
       , {'store':100,'Forecast':9, 'Lag':0.2}
       , {'store':200,'Forecast':6, 'Lag':1.2}]

df = pd.DataFrame(data)

df['predict']= df['Forecast'] * df['Lag']
df['residue']= df['predict'] - np.fix(df['predict'])

1 Ответ

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

Попробуйте использовать pandas.DataFrame.shift для создания столбцов со смещенными значениями.

df['store_prev'] = df.store.shift(1)
df['lag_prev'] = df.lag.shift(1)

   store  forecast  lag  store_prev  lag_prev
0    100        11  0.7         NaN       NaN
1    100         9  0.2       100.0       0.7
2    200         6  1.2       100.0       0.2

Тогда вы можете apply функцию для каждой строки и drop временных столбцов, созданных ранее.

df['predict'] = df.apply(lambda row: row.forecast * row.lag + row.lag_prev
                         if row.store == row.store_prev
                         else row.forecast * row.lag, axis=1)
df.drop(columns=['store_prev', 'lag_prev'])

   store  forecast  lag  predict
0    100        11  0.7      7.7
1    100         9  0.2      2.5
2    200         6  1.2      7.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...