Как применить разные столбцы к разным коэффициентам, расчеты которых различаются по строкам в питонах? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь умножить значение из dataframe2 в dataframe1 для каждого столбца, доступного в dataframe2. (Если столбец недоступен в dataframe2, его необходимо пропустить)

     Dataframe1                      Dataframe2 
Day       SPAN1 SPAN2           SPAN    Growth_Factor
4/4/2014    38   289            SPAN1        20%
4/5/2014    188  324            SPAN2        150%
4/6/2014    0    118                
4/7/2014    0    139                
4/8/2014    0    0              
4/9/2014    118  0              
4/10/2014   14   0              
4/11/2014   221  135                
4/12/2014   199  39             
4/13/2014   347  12 

Теперь я хочу применитьследующий расчет для каждой строки dataframe1, где «SPAN1-OLD» совпадает с dataframe1, а «SPAN1-NEW» - это расчет, который я хочу применить

SPAN1-OLD   SPAN1-NEW   Calculation
  38           38         = 38              - Row1 Remain same as OLD data
  188          196        = 188 + (38*20%)  - The 20% of above value + OLD value
  0            39         = 0 + (196*20%)   - ROW2 calculation Applicable for all below row
  0            8          = 0 + (39*20%)
  0            2          = 0 + (8*20%)
  118          118        = 118 + (2*20%)
  14           38         = 14 + (118*20%)
  221          229        = 221 + (38*20%)
  199          245        = 199 + (229*20%)
  347          396        = 347 + (245*20%)
* 20% arrived from the dataframe2 (when Columnname in dataframe1 and Row of dataframe2 will match)      

Я пытаюсь использовать приведенный ниже код, но это не такпомогите мне, как я ожидал

name = list(list(list(dataframe2.T.to_dict(orient='split').values())[2:])[0])[0]
val = list(list(list(dataframe2.T.to_dict(orient='split').values())[2:])[0])[1]
res = {} 
for key in name: 
    for value in val: 
        res[key] = value 
        val.remove(value) 
        break
res

a = list(dataframe1.columns)
b = list(dataframe2.iloc[:,0])

for i in [x for x in a if x in b]:
    dataframe1[i] = (dataframe1[i] * res.get(i))

Теперь мой ожидаемый результат такой же, как показано ниже после применения изменений, упомянутых в расчете:

          Dataframe1        
Day           SPAN1     SPAN2
4/4/2014      38        289
4/5/2014      196       758
4/6/2014      39        1254
4/7/2014      8         2020
4/8/2014      2         3031
4/9/2014      118       4546
4/10/2014     38        6819
4/11/2014     229       10363
4/12/2014     245       15584
4/13/2014     396       23388

Что я должен включить / изменить в приведенном выше коде, чтобы получитьжелаемый вывод?

Спасибо.

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