Обновите все значения в столбце A Pandas Dataframe со значениями столбцов B, НО, только если значение в B ненулевое - PullRequest
1 голос
/ 22 марта 2019

Мой предыдущий код обновляет все значения в 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

Но я бы хотел сделать обратное и обновить A всеми значениями в B, отличными от нуля. Я могу обновить всю A с помощью B, но я бы хотел сохранить существующие значения в A, так как замена на ноль бесполезна

Желаемый результат:

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

Ответы [ 3 ]

3 голосов
/ 22 марта 2019

Использование 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
2 голосов
/ 22 марта 2019

Другой способ будет,

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

O / P:

         A     B
0  Unknown     0
1     CORP  CORP
2     GOVT  GOVT
3  Unknown     0
0 голосов
/ 22 марта 2019

Использование np.where

df['A'] = np.where(df['B']!=0, df['B'], df['A'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...