Как добавить значения в новый столбец в Pandas, используя своего рода VLOOKUP?

#python #python-3.x #pandas #performance #vlookup

#python #python-3.x #pandas #Производительность #vlookup

Вопрос:

Я работаю над проектом по анализу наборов данных маркетинговой кампании Amazon. Кампании имеют иерархию:

«Camapigns» включает «AdGroups» включает «Ключевые слова».

Хотя я вижу значение производительности для всех типов записей (кампания, группа объявлений и ключевое слово), изменение «Ставки» возможно только для ключевого слова типа записи. Фактическая кампания содержит 17 000 строк и несколько разных кампаний и т.д., Однако я создал примерную версию здесь:

 import pandas as pd

d = {'Record Type': ['Campaign','AdGroup','Keyword','Keyword','Keyword'],
     'Campaign':['Test_Campaign','Test_Campaign','Test_Campaign','Test_Campaign','Test_Campaign'],
     'AdGroup':['','AdGroup_A','AdGroup_A','AdGroup_A','AdGroup_A'],
     'Keyword':['','','Keyword_A','Keyword_B','Keyword_C'],
     'Bid':['NA','NA',1,1,1],
     'Performance':['0.3','0.9',0.6,1.1,1.3]}

df = pd.DataFrame(data=d)
print(df)
  

Что я хочу, чтобы программа делала:

1) Проверьте производительность группы AD ‘Record Type’. Если производительность имеет определенное условие (например, если производительность < 1), ставка ключевого слова ‘Record Type’ должна быть изменена (например, 10 %).

Моя идея:

  1. Создайте новый столбец, представляющий собой комбинацию значений «campaign_AdGroup» (тогда у нас будет единственное значение для каждой группы объявлений, потому что группа объявлений с таким же именем может быть в другой кампании).

  2. Создайте дополнительный столбец со значением действия «Action» (например: 110%, потому что мы хотим повысить ключевое слово на 10 %).

    1. На последнем шаге я бы перебрал все ключевое слово ‘Record Type’ и выполнил бы VLOOKUP для комбинации «campaign ADGroup». Если результат найден в ‘Action’, ставка конкретного ключевого слова должна быть умножена на значение «Action».

У вас есть какие-либо предложения для шага 3.? Вот последний код:

 import pandas as pd

d = {'Record_Type': ['Campaign','AdGroup','Keyword','Keyword','Keyword'],'Campaign':['Test_Campaign','Test_Campaign',
                    'Test_Campaign','Test_Campaign','Test_Campaign'],'AdGroup':['','AdGroup_A','AdGroup_A','AdGroup_A','AdGroup_A']
    ,'Keyword':['','','Keyword_A','Keyword_B','Keyword_C'],'Bid':['NA','NA',1,1,1],'Performance':[0.3,0.9,0.6,1.1,1.3]}

df = pd.DataFrame(data=d)
df ['Action'] = 1
df ['Help'] = df['Record_Type']   df['Campaign']
print(df)
  

Ответ №1:

Я бы, вероятно, использовал функцию apply lambda. т.е.

 df["Action"] = df.apply(lambda r: 1.1 if r["Record_Type"] == "AdGroup" and r["Performance"] < 1 else r["Action"], axis=1)
  

Вы также могли бы использовать iloc с условием.

Комментарии:

1. Спасибо за помощь, но сейчас это не решение проблемы. Потому что: Если значение производительности группы объявлений < 1, я хочу изменить ставку каждого ключевого слова, входящего в эту группу объявлений. Итерация должна состоять из 2 шагов: 1) Проверьте производительность на уровне ADGroup и сохраните информацию, если требуется изменение значения ставки для ключевых слов. Сохраненные данные могут представлять собой набор данных «Campaign» «ADGroup» и действие. 2) На втором шаге необходимо проверить все ключевое слово ‘Record_Type’. Если ключевое слово «Campaign» «ADGroup» находится в списке раньше, действие

2. должно быть принято на уровне ключевого слова. Например, в этом случае: производительность ‘AdGroup_A’ равна 0.9. Нам нужно сохранить информацию «Test_CampaignAdGroup_A» и значение «Action» «1.1». На втором шаге нам нужно проверить все ключевое слово ‘Record_Type’. Для каждого ключевого слова также создается комбинация «campaign» «ADGroup». Теперь это должен быть своего рода VLOOKUP для тех же данных в ADGroup, и если есть действие, действие должно быть умножено на ставку ключевого слова. В этом случае ключевое слово all должно быть умножено на 1.1.