我之前的代码将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
答案 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'])