Python 使用列B'更新数据帧列A中的所有值;s值,但仅当B中的值非零时

Python 使用列B'更新数据帧列A中的所有值;s值,但仅当B中的值非零时,python,pandas,dataframe,Python,Pandas,Dataframe,我以前的代码使用A中的值更新B中的所有值,其中B为零 dft = pd.DataFrame( np.array([ ['Unknown', 0], ['Unknown', 'CORP'], ['Unknown', 'GOVT'], ['Unknown', 0] ]), columns=['A', 'B']

我以前的代码使用A中的值更新B中的所有值,其中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

使用
np.where

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

使用
np.where

df['A'] = np.where(df['B']!=0, df['B'], df['A'])
使用。要替换列,请执行以下操作:

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
使用。要替换列,请执行以下操作:

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
另一种方式是

df.loc[df.B!='0','A']=df['B'] 
O/p:

另一种方式是

df.loc[df.B!='0','A']=df['B'] 
O/p: