0

假设我有以下数据框:

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

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

df1

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

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

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

df2

其中“x”是 3,“x!” 是 6,因为 3 x 2 (x! row-1 = 2) 等于 6。

我该怎么做?

谢谢

4

1 回答 1

0

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

let df1 = {'Column_1':  ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],'x': ['0', '1', '2', '3', '0', '1', '2', '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', '1', '2', '3', '0', '1', '2', '3']
    console.log(newX)  //RESULT  ['1', '1', '2', '6', '1', '1', '2', '6']

之后,您可以分配新的 x!大批:

df1['x!'] = newX

并应用于DataFrame

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

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

于 2021-01-01T16:47:45.783 回答