跨数据帧应用累积校正因子

时间:2019-06-23 12:49:46

标签: python pandas

我对Pandas并不陌生,所以如果我的问题的答案很明显,请原谅我。我有一个像这样的数据集

    Data Correction
0   100  Nan
1   104  Nan
2   108  Nan
3   112  Nan
4   116  Nan
5   120  0.5
6   124  Nan
7   128  Nan
8   132  Nan
9   136  0.4
10  140  Nan
11  144  Nan
12  148  Nan
13  152  0.3
14  156  Nan
15  160  Nan

我要计算的是向上累积的数据的校正因子。

我的意思是,13及以下的元素应应用因子0.39及以下的元素应应用0.3*0.45及以下的因子0.3*0.4*0.5

因此最终更正栏应如下图所示

    Data  Correction  Factor
0   100   Nan         0.06
1   104   Nan         0.06
2   108   Nan         0.06
3   112   Nan         0.06
4   116   Nan         0.06
5   120   0.5         0.06
6   124   Nan         0.12
7   128   Nan         0.12
8   132   Nan         0.12
9   136   0.4         0.12
10  140   Nan         0.3
11  144   Nan         0.3
12  148   Nan         0.3
13  152   0.3         0.3
14  156   Nan         1
15  160   Nan         1

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我认为您在反转Correction列之后正在寻找cumprod()

df=df.assign(Factor=df.Correction[::-1].cumprod().ffill().fillna(1))

    Data  Correction  Factor
0    100         NaN    0.06
1    104         NaN    0.06
2    108         NaN    0.06
3    112         NaN    0.06
4    116         NaN    0.06
5    120         0.5    0.06
6    124         NaN    0.12
7    128         NaN    0.12
8    132         NaN    0.12
9    136         0.4    0.12
10   140         NaN    0.30
11   144         NaN    0.30
12   148         NaN    0.30
13   152         0.3    0.30
14   156         NaN    1.00
15   160         NaN    1.00

答案 1 :(得分:0)

我想不出一个很好的pandas函数来执行此操作,但是,您可以创建一个for循环来将值与数组相乘,然后将其作为列。

import numpy as np
import pandas as pd

lst = [np.nan,np.nan,np.nan,np.nan,np.nan,0.5,np.nan,np.nan,np.nan,np.nan,0.4,np.nan,np.nan,np.nan,0.3,np.nan,np.nan]
lst1 = [i + 100 for i in range(len(lst))]
newcol= [1.0 for i in range(len(lst))]
newcol = np.asarray(newcol)
df = pd.DataFrame({'Data' : lst1,'Correction' : lst})
for i in range(len(df['Correction'])):
  if(~np.isnan(df.Correction[i])):
    print(df.Correction[i])
    newcol[0:i+1] = newcol[0:i+1] * df.Correction[i]
df['Factor'] = newcol
print(df)

此代码打印

Data  Correction  Factor
0    100         NaN    0.06
1    101         NaN    0.06
2    102         NaN    0.06
3    103         NaN    0.06
4    104         NaN    0.06
5    105         0.5    0.06
6    106         NaN    0.12
7    107         NaN    0.12
8    108         NaN    0.12
9    109         NaN    0.12
10   110         0.4    0.12
11   111         NaN    0.30
12   112         NaN    0.30
13   113         NaN    0.30
14   114         0.3    0.30
15   115         NaN    1.00
16   116         NaN    1.00