如何在python中应用按行计算不同的列不同因子?

2024-06-16 11:02:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为dataframe2中可用的每一列将一个值从dataframe2乘以dataframe1。(如果该列在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

为了获得理想的输出,我应该在上述代码中包括/更改什么

谢谢


Tags: ofinnewforvalueresvalold