#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 %).
Моя идея:
-
Создайте новый столбец, представляющий собой комбинацию значений «campaign_AdGroup» (тогда у нас будет единственное значение для каждой группы объявлений, потому что группа объявлений с таким же именем может быть в другой кампании).
-
Создайте дополнительный столбец со значением действия «Action» (например: 110%, потому что мы хотим повысить ключевое слово на 10 %).
- На последнем шаге я бы перебрал все ключевое слово ‘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.