首页 > 解决方案 > 更新 Pandas Dataframe 列 A 中的所有值,仅当 B 中的值不为零时才使用列 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

标签: pythonpandasdataframe

解决方案


使用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

推荐阅读