Имитация формулы Excel в Python - PullRequest
       1

Имитация формулы Excel в Python

0 голосов
/ 23 сентября 2019

Я пытаюсь смоделировать формулу Excel за последние несколько часов, но не могу этого сделать.Буду признателен за любую помощь

Версия формулы Excel -

IF(N2<>N1,O2-L2,Q1-L2)

Explanation - IF (N2 != N1) THEN O2-L2 ELSE Q1-L2

Columns Abbreviations - 

N = key_2
O = available_inventory
L = total_demand
Q = net_inventory

Я сделал некоторые начальные шаги в Python, но не смог воспроизвести ту же формулу.Ниже моя версия -

1. df_ao_pvt['key_2_shift'] = df_ao_pvt['key_2'].shift(-1,axis = 0)

2. df_ao_pvt['available_inventory'] = df_ao_pvt['available_inventory'].replace(np.nan, 0)

3. df_ao_pvt['net_inventory'] = df_ao_pvt.apply(lambda row: row.available_inventory - row.total_demand if row.key_2 != row.key_2_shift else row.net_inventory - row.total_demand, axis = 1)

Дополнительная информация - DTYPE соответствующих столбцов написаны ниже -

1. total_demand - int64
2. key_2 - Object
3. available_inventory - float64

Нам нужно создать формулу в новом столбце с именем net_inventory (как написанов Python-версии кода).Заполненный столбец - это net_inventory (как написано в коде Python)

Ниже приведен пример формата данных, в котором я хочу повторить формулу (Примечание. В реальных данных строки превышают 1 миллион) -

total_demand|key_2|available_inventory|key_2_shift|net_inventory
120000|20611011205|120520611012019-06-19|240000|120520611012019-06-20|120000
120000|20611011205|120520611012019-06-20|120000|120520611012019-06-26|0
120000|20611011205|120520611012019-06-26|120000|120520611012019-06-27|0
120000|20611011205|120520611012019-06-27|0|280120611012019-06-20|-120000
180000|20611012801|280120611012019-06-20|0|310420611012019-06-06|-180000

1 Ответ

0 голосов
/ 23 сентября 2019

np.where похоже на IF в Excel.Таким образом, вы хотели бы сделать:

df['new_col'] = np.where(df['N'].ne(df['N'].shift()), 
                         df['O'], 
                         df['Q'].shift()
                        ) - df['L']

Заменить N,O,Q,L на соответствующие имена столбцов.

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