使用Python中上一行的数据在列中创建行值

使用Python中上一行的数据在列中创建行值,python,pandas,lag,shift,Python,Pandas,Lag,Shift,我正在尝试创建一个新列,其中第一行中的值为0,从第二行开始,它应该进行如下所述的计算,即 ColumnA[This row] = (ColumnA[Last row] * 13 + ColumnB[This row])/14 我正在使用python的pandas shift函数,但它似乎没有产生预期的结果 test = np.array([ 1, 5, 3, 20, 2, 6, 9, 8, 7]) test = pd.DataFrame(test, columns = ['ABC']) t

我正在尝试创建一个新列,其中第一行中的值为0,从第二行开始,它应该进行如下所述的计算,即

ColumnA[This row] = (ColumnA[Last row] * 13 + ColumnB[This row])/14
我正在使用python的pandas shift函数,但它似乎没有产生预期的结果

test  = np.array([ 1, 5, 3, 20, 2, 6, 9, 8, 7]) 
test = pd.DataFrame(test, columns = ['ABC'])
test.loc[test['ABC'] == 1, 'a'] = 0
test['a'] = (test['a'].shift()*13 + test['ABC'])/14
我正在尝试创建一个如下所示的列

基础知识 A. 1. 0 5. 0.3571 3. 0.5459 20 1.9355 2. 1.9401 6. 2.2301 9 2.7137 8. 3.0913 7. 3.3705
test=np.array([1,2,3,4,5,6,7,8,9])
test=pd.DataFrame(test,columns=['ABC']))
测试[“res”]=测试[“ABC”]
test.iloc[0]['res']=0#将第一行初始化为0
test[“res”]=test.res+test.res.shift()
test[“res”]=test.res.fillna(0).astype(int)#test.res.shift()引入了一个nan,我们将其替换为0,并将列数据类型转换为int
试试:

test[“a”]=(test[“ABC”].shift().cumsum()+test[“ABC”].shift()).fillna(0)
打印(测试)
印刷品:

abca
0    1   0.0
1    2   2.0
2    3   5.0
3    4   9.0
4    5  14.0
5    6  20.0
6    7  27.0
7    8  35.0
8    9  44.0
让我们试试for循环

import pandas as pd

df = pd.DataFrame({'ABC': [1, 5, 3, 20, 2, 6, 9, 8, 7]})

lst = [0]
res = 0
for i, row in df.iloc[1:].iterrows():
    res = ((res * 13) + row['ABC']) / 14
    lst.append(res)

df['a'] = pd.Series(lst)
print(df)
输出:

   ABC         a
0    1  0.000000
1    5  0.357143
2    3  0.545918
3   20  1.935496
4    2  1.940103
5    6  2.230096
6    9  2.713660
7    8  3.091256
8    7  3.370452

不,这只是最后两行的总和。如果你看到我发布的表格,每一行都是前一行和当前列的总和,实际上现在修改了这个问题,问我想做什么。请你看一下好吗?不,如果这个数字是按升序排列的,这就行了。如果将序列更改为test=np.array([1,2,8,4,9,6,7,3,5])。结果将不一样。我想编写代码,将同一列上一行中的值与另一列中同一行中的值求和。实际上,现在修改了问题,以询问我到底想做什么。你能看一下吗?实际上现在修改了这个问题,问我到底想做什么。你能看一看吗?你能展开给定行的计算吗?更新数字以获得更多的十进制值这不是我的问题。我对
(ColumnA[最后一行]*13+ColumnB[这一行])/14的理解是第2行(0.3571)将是(1*13+5)/14,即1.28而不是0.3571。如何计算值?上表['a']列中的第1行为0。我想从第一行的0开始,所以(0*13+5)/14=0.3571