问题描述
假设我有以下数据框:
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))
我希望这能解决您的问题。 :)