Python 如何根据计算条件创建新列?
有两个列A和列老化。需要创建一个名为simulator的新列,其条件(平均值+标准值)为a列。例如,对于所有老化==2,应根据a列中的相应值计算模拟器 我尝试了下面给出的代码,但是当我更改老化值时,模拟器值没有更改。下面提供的是我尝试过的参考数据和代码Python 如何根据计算条件创建新列?,python,pandas,dataframe,numpy,Python,Pandas,Dataframe,Numpy,有两个列A和列老化。需要创建一个名为simulator的新列,其条件(平均值+标准值)为a列。例如,对于所有老化==2,应根据a列中的相应值计算模拟器 我尝试了下面给出的代码,但是当我更改老化值时,模拟器值没有更改。下面提供的是我尝试过的参考数据和代码 # seed the pseudorandom number generator from numpy.random import seed from numpy.random import randint # seed random numbe
# seed the pseudorandom number generator
from numpy.random import seed
from numpy.random import randint
# seed random number generator
seed(1)
# generate some random numbers
x=pd.DataFrame(randint(0, 10, 20),columns=list('A'))
# reset the seed
seed(1)
# generate some random numbers
x['aging']=pd.DataFrame(randint(1,5,20),columns=list('z'))
x['simulator']=np.where(x['aging']==2,x.A.mean()+x.A.std(),0)
x['simulator']=np.where(x['aging']==4,x.A.mean()+x.A.std(),x['simulator'])
np。其中
首先计算值,然后根据条件选择这些值。因此,在这两种情况下,x.A.mean()+x.A.std()
都是在整个数据帧上计算的,并且在每种情况下都是相同的数据帧,所选的值是相同的
唯一的区别是,该值仅设置为x['aging']==2
或x['aging']==4
的行,具体取决于条件
如果希望列为每个账龄内的平均值+std
,请使用groupby
+transform
:
gp = x.groupby('aging')['A']
x['simulator'] = gp.transform('mean') + gp.transform('std')
A aging simulator
0 5 2 7.088436
1 8 4 6.835113
2 9 1 9.041928
3 5 1 9.041928
4 0 4 6.835113
5 0 2 7.088436
6 1 4 6.835113
7 7 2 7.088436
8 6 4 6.835113
9 9 1 9.041928
10 2 1 9.041928
11 4 2 7.088436
12 5 1 9.041928
13 2 4 6.835113
14 4 2 7.088436
15 2 1 9.041928
16 4 3 7.621320
17 7 2 7.088436
18 7 3 7.621320
19 9 1 9.041928