Панды: Изменить значение ячейки на основе другого столбца и самого значения - PullRequest
1 голос
/ 16 мая 2019

У меня есть следующие панды df:

category1   category2
A           B
A           C
B           NaN
A           NaN

И я хочу изменить значения в category2 на D, если выполняются следующие условия:

  • category1 == A
  • category2 == NaN

Поэтому мой ожидаемый результат будет:

category1   category2
A           B
A           C
B           NaN
A           D

Я пробовал два способа:

df.loc[((df.category1 == "A") & (df.category2 == 'nan')), "category2"] = "D" # doesn't change anything

и

import numpy as np
df['category2'] = np.where(((df['category1'] == 'A') & (df['category2'] == "")), "D")
# ValueError: either both or neither of x and y should be given

Почему не работает ни одна из строк?

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Ошибка:

ValueError: либо оба, либо ни один из x и y должны быть заданы

говорит вам, что для np.where необходимо значение, из которого можно выбрать как при условии True, так и также False. В вашем случае он знает только, что когда это True, вы хотите D. Вместо этого сделайте:

df['category2'] = np.where(((df['category1'] == 'A') & (df['category2'].isna())),
                             "D", df['category2'])
2 голосов
/ 16 мая 2019

Используйте ниже:

df.loc[df.category2.isna()&df.category1.eq('A'),'category2']='D'
print(df)

  category1 category2
0         A         B
1         A         C
2         B       NaN
3         A         D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...