多行计算

问题描述

假设我有以下数据框:

df1 = {'Column_1':  ['A','A','B','B'],'x': ['0','1','2','3','0','3']}

df1 = pd.DataFrame (df1,columns = ['Column_1','x'])

df1

我想创建一个名为“x!”的新列。这是通过取行“x”中的值并将其乘以“x!”的第 1 行来计算的。 'x!' 第一行的值是 1。当“Column_1”中的值发生变化时,我需要进行计算以重置。所需的输出如下:

df2 = {'Column_1':  ['A','3'],'x!': ['1','6','6']}

df2 = pd.DataFrame (df2,'x','x!'])

df2

'x' 是 3,'x!'是 6,因为 3 x 2 (x!row-1 = 2) 等于 6。

我该怎么做?

谢谢

解决方法

试试这个简单明了的方法:

let df1 = {'Column_1':  ['A','A','B','B'],'x': ['0','1','2','3','0','3']}
let newX = ['1'];
    
    for(i=1; i<df1['x'].length; i++){
        let check = parseInt(df1.x[i],10)*parseInt(df1.x[i-1],10)
        if(check ===0){
            newX.push('1')
        }else{
            newX.push(check.toString())
        }
    }
    
    console.log(df1.x) //INITIAL ['0','3']
    console.log(newX)  //RESULT  ['1','6','6']

之后,您可以分配新的 x!数组:

df1['x!'] = newX

并应用于DataFrame

df2 = pd.DataFrame (df2,columns = Object.keys(df1))

我希望这能解决您的问题。 :)