Изменение ячейки в столбце B, если ячейка в столбце A пуста - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть нулевые (нан) значения в столбце A, и я хотел бы присвоить 0 для ячеек в столбце B, когда ячейка той же строки в столбце A равна нулю.

Столбец B был создан какследующее лямбда-выражение:

df['col_B'] = df.apply(lambda x: x.col_A in x.col_C, axis=1)

Я пытался изменить его, но он не работает, и из того, что я прочитал, не рекомендуется.

Итак, я попытался с классическим циклом,он не показывает ошибок, но не изменяет ячейки в столбце B:

for index, row in df.iterrows():
    if row['col_A'] is None:
        df.at[index, 'col_B'] = 0

Мои нулевые значения отображаются как "nan" (не "None" или "Nan"), поэтому я даже не уверенPython рассматривает их как реальные нулевые значения.

Что бы вы посоветовали?

1 Ответ

0 голосов
/ 04 февраля 2019

Вы должны избегать pd.Series.apply везде, где это возможно .Тем не менее, для условного присваивания есть несколько альтернатив через логические ряды.

Вы можете использовать loc:

df.loc[df['col_A'].isnull(), 'col_B'] = 0

или mask:

df['col_B'] = df['col_B'].mask(df['col_A'].isnull(), 0)

Или np.where:

df['col_B'] = np.where(df['col_A'].isnull(), 0, df['col_B'])

Если ваши нули являются строками, убедитесь, что вы сначала их заменили;например:

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