Script 167: Campaign Code
Purpose
Python script to add a dimensions tag based on the campaign name.
To Elaborate
The Python script solves the problem of adding a dimensions tag to a campaign based on its name. The dimensions tag is extracted from the campaign name by splitting it using a separator and selecting the tag value after the first separator. The script then compares the extracted tag with the existing tag and updates it if they are different. The updated campaign data is stored in an output dataframe.
Walking Through the Code
- The configurable parameters are defined at the beginning of the script:
SEP
(separator used to split the campaign name) andTAG_LOCATION
(index of the tag value after splitting). - The column constants are defined:
RPT_COL_CAMPAIGN
,RPT_COL_ACCOUNT
,RPT_COL_TEST
,BULK_COL_ACCOUNT
, andBULK_COL_CAMPAIGN
. - The
get_tag_from_campaign_name
function is defined to extract the tag from the campaign name by splitting it using the separator and selecting the tag value at the specified index. - The input dataframe is copied to the output dataframe.
- A loop iterates through each row of the input dataframe.
- The existing tag and campaign name are extracted from the row.
- The tag is extracted from the campaign name using the
get_tag_from_campaign_name
function. - The campaign name and extracted tag are printed.
- If the extracted tag is not empty and different from the existing tag, the output dataframe is updated with the new tag value.
- If the extracted tag is empty or the same as the existing tag, the output dataframe is updated with NaN.
- 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 : 167
- Client ID / Customer ID: 1306924185 / 60269297
- Action Type: Bulk Upload
- Item Changed: Campaign
- Output Columns: Account, Campaign, Campaign Code
- Linked Datasource: M1 Report
- Reference Datasource: None
- Owner: ascott@marinsoftware.com (ascott@marinsoftware.com)
- Created by ascott@marinsoftware.com on 2023-06-07 14:50
- Last Updated by ascott@marinsoftware.com on 2023-12-06 04:01
> 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 = 0 # comes after first separator
########### Configurable Params - END ###########
RPT_COL_CAMPAIGN = 'Campaign'
RPT_COL_ACCOUNT = 'Account'
RPT_COL_TEST = 'Campaign Code'
BULK_COL_ACCOUNT = 'Account'
BULK_COL_CAMPAIGN = 'Campaign'
BULK_COL_TEST = 'Campaign Code'
# 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