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
你是说到处都是“上面”对吗?非常感谢你这么及时的回复