仅当B中的值不为零时,才使用B列的值BUT更新Pandas Dataframe列A中的所有值

时间:2019-03-22 11:25:00

标签: python pandas dataframe

我之前的代码将B中的所有值更新为A中的值,其中B为零

dft = pd.DataFrame(
                    np.array([
                                ['Unknown', 0], ['Unknown', 'CORP'], ['Unknown', 'GOVT'], ['Unknown', 0]
                            ]), columns=['A', 'B']
                  )
print(dft)
mask = dft['B'] == '0'
dft.loc[mask, 'B'] = dft['A']

         A     B
0  Unknown     0
1  Unknown  CORP
2  Unknown  GOVT
3  Unknown     0

         A        B
0  Unknown  Unknown
1  Unknown     CORP
2  Unknown     GOVT
3  Unknown  Unknown

但是我想做一个逆运算,并用B中所有非零的值更新A。我可以用B更新整个A,但是我想保留A中的现有值,因为用零替换无济于事

所需结果:

         A     B
0  Unknown     0
1  CORP     CORP
2  GOVT     GOVT
3  Unknown     0

3 个答案:

答案 0 :(得分:3)

使用DataFrame.where。替换列:

dft = dft.where(dft['B'] == '0', dft.B, axis=0)
print (dft)
         A     B
0  Unknown     0
1     CORP  CORP
2     GOVT  GOVT
3  Unknown     0

但是,仅替换列A

dft['A'] = dft['A'].where(dft['B'] == '0', dft.B)
#dft.loc[dft['B'] !='0','A'] = dft['B']

print (dft)
         A     B
0  Unknown     0
1     CORP  CORP
2     GOVT  GOVT
3  Unknown     0

答案 1 :(得分:2)

另一种方式是,

df.loc[df.B!='0','A']=df['B'] 

O / P:

         A     B
0  Unknown     0
1     CORP  CORP
2     GOVT  GOVT
3  Unknown     0

答案 2 :(得分:0)

使用np.where

df['A'] = np.where(df['B']!=0, df['B'], df['A'])