Присвоение значений нескольким столбцам на основе одного условия с использованием Pandas (Python) - PullRequest
0 голосов
/ 13 июля 2020

Мне нужно создать несколько новых столбцов на основе одного условия. У меня есть код, состоящий из нескольких строк, есть ли способ сократить или оптимизировать приведенный ниже код, поскольку мне приходится повторять его несколько раз:

LOOKUP['Publisher']= np.where(LOOKUP['Subchannel'].str.contains("PROMO"),"Instagram",LOOKUP['Publisher'])
LOOKUP['Channel']= np.where(LOOKUP['Subchannel'].str.contains("PROMO"),"Social",LOOKUP['Channel'])
LOOKUP['Source']=  np.where(LOOKUP['Subchannel'].str.contains("PROMO"),"AA",LOOKUP['Source'])

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Если столбец еще не существует, вы можете попробовать следующее, чтобы избежать нескольких операторов where:

condition = LOOKUP['Subchannel'].str.contains("PROMO")
# for all those rows where condition is not satisfied, insert a blank
LOOKUP[['Publisher','Channel','Source']] = 
pd.DataFrame(np.where(condition[:, None], ['Instagram','Social','AA'], ['','','']))
0 голосов
/ 13 июля 2020

Вопрос немного сбивает с толку, потому что похоже, что у вас уже есть столбцы, которые вы хотите создать. Они предварительно инициализированы пустыми данными или чем-то подобным?

Я думаю, что другие люди говорят вам примерно так:

cols = ['Publisher','Channel','Source', ...] # Name of the columns you want to iterate
values = ['Instagram', 'Social', 'AA', ...] # The values you want to yield after np.where()

for i in range(len(cols)):
    LOOKUP[cols[i]] = np.where(LOOKUP['Subchannel'].str.contains("PROMO"),values[i], LOOKUP[cols[i]])

Таким образом, вам не нужно писать много похожих строк. Вместо этого просто обновите cols и values.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...