Script 103: Tag Campaigns based on Name
Purpose
Tag Campaigns based on Name
To Elaborate
The Python script solves the problem of parsing campaign names and adding campaign-level Marin Dimensions tags. The tag is extracted from the campaign name after the first underscore. The script also checks if the extracted tag is different from the existing tag and only adds the tag if it is different.
Walking Through the Code
- The script starts by defining configurable parameters, such as the separator and the location of the tag in the campaign name.
- A function named
get_tag_from_campaign_name
is defined to parse the tag from the campaign name. It splits the campaign name using the separator and retrieves the value after the first separator. - The input rows are copied to the output dataframe.
- The script loops through all the rows in the input dataframe.
- For each row, it retrieves the existing tag and the campaign name.
- The tag is extracted from the campaign name using the
get_tag_from_campaign_name
function. - The campaign name and the extracted tag are printed.
- If the extracted tag is different from the existing tag and not empty, the tag is added to the output dataframe at the corresponding row.
- If the extracted tag is empty or the same as the existing tag, a NaN value is added to the output dataframe at the corresponding row.
- The output dataframe is filtered to include only rows with non-empty tags.
- If the output dataframe is not empty, it is printed in a tabular format.
- If the output dataframe is empty, a message indicating an empty output is printed.
Vitals
- Script ID : 103
- Client ID / Customer ID: 309909744 / 14196
- Action Type: Bulk Upload (Preview)
- Item Changed: Campaign
- Output Columns: Account, Campaign, Test
- Linked Datasource: M1 Report
- Reference Datasource: None
- Owner: Michael Huang (mhuang@marinsoftware.com)
- Created by Michael Huang on 2023-05-16 22:54
- Last Updated by dwaidhas@marinsoftware.com on 2024-02-01 15:58
> See it in Action
Python Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#
# Add Dimensions Tag based on Campaign Name (minimal Pandas)
#
#
# Author: Michael S. Huang
# Date: 2023-05-17
#
########### Configurable Params - START ##########
SEP = '_'
TAG_LOCATION = 1 # comes after first separator
########### Configurable Params - END ###########
RPT_COL_CAMPAIGN = 'Campaign'
RPT_COL_ACCOUNT = 'Account'
RPT_COL_TEST = 'Test'
BULK_COL_ACCOUNT = 'Account'
BULK_COL_CAMPAIGN = 'Campaign'
BULK_COL_TEST = 'Test'
# define function to parse tag from campaign name
def get_tag_from_campaign_name(campaign_name):
vals = campaign_name.split(SEP)
# assume tag value is after 1st separator
tag = ''
try:
tag = str(vals[TAG_LOCATION])
except:
tag = ''
return tag
# copy all input rows to output
outputDf = inputDf.copy()
# loop through all rows
for index, row in inputDf.iterrows():
existing_tag = row[RPT_COL_TEST]
campaign_name = row[RPT_COL_CAMPAIGN]
tag = get_tag_from_campaign_name(campaign_name)
print("Campaign [%s] => Tag [%s]" % (campaign_name, tag))
# only tag if it's different than existing tag
if (len(tag) > 0) & (tag != existing_tag):
outputDf.at[index, BULK_COL_TEST] = tag
else:
outputDf.at[index, BULK_COL_TEST] = np.nan
# only include non-empty tags in bulk
outputDf = outputDf.loc[ outputDf[BULK_COL_TEST].notnull() ]
if not outputDf.empty:
print("outputDf", tableize(outputDf))
else:
print("Empty outputDf")
Post generated on 2024-05-15 07:44:05 GMT