Python 使用列B'更新数据帧列A中的所有值;s值,但仅当B中的值非零时
我以前的代码使用A中的值更新B中的所有值,其中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']
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: