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

Python 跨数据帧应用累积校正因子,python,pandas,Python,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

我对熊猫相当陌生,所以如果我的问题的答案很明显,请原谅我。我有一个这样的数据集

    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
    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
我想要的是计算向上累积的数据的修正系数

我的意思是
13
及以下的元素应该应用系数
0.3
9
及以下的元素应用
0.3*0.4
5
及以下
0.3*0.4*0.5

最后的修正列应该是这样的

    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
    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

我怎样才能做到这一点?

我想你是在颠倒
更正
列后寻找的:

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


我想不出一个好的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

你是说到处都是“上面”对吗?非常感谢你这么及时的回复