Script 175: Campaign Tactic

Purpose

Python script to add dimensions tag based on campaign name.

To Elaborate

The Python script solves the problem of adding dimensions tags to campaign names. It takes a campaign name as input and extracts the tag value from it. If the extracted tag is different from the existing tag, it updates the tag value in the output dataframe. The script also filters out rows with empty tags and prints the resulting dataframe.

Walking Through the Code

  1. The script starts by defining configurable parameters, such as the separator and the location of the tag in the campaign name.
  2. It then defines column constants for the input and output dataframes.
  3. The script defines a function called get_tag_from_campaign_name that takes a campaign name as input and returns the tag value extracted from it.
  4. The script creates a copy of the input dataframe as the output dataframe.
  5. It iterates through each row in the input dataframe.
  6. For each row, it retrieves the existing tag and campaign name.
  7. It calls the get_tag_from_campaign_name function to extract the tag from the campaign name.
  8. It prints the campaign name and extracted tag.
  9. If the extracted tag is different from the existing tag and not empty, it updates the tag value in the output dataframe.
  10. If the extracted tag is empty or the same as the existing tag, it sets the tag value in the output dataframe as NaN.
  11. After iterating through all rows, the script filters out rows with empty tags in the output dataframe.
  12. If the resulting output dataframe is not empty, it prints the tableized output dataframe.
  13. If the resulting output dataframe is empty, it prints “Empty outputDf”.

Vitals

  • Script ID : 175
  • Client ID / Customer ID: 1306924185 / 60269297
  • Action Type: Bulk Upload (Preview)
  • Item Changed: Campaign
  • Output Columns: Account, Campaign, Campaign Tactic
  • Linked Datasource: M1 Report
  • Reference Datasource: None
  • Owner: ascott@marinsoftware.com (ascott@marinsoftware.com)
  • Created by ascott@marinsoftware.com on 2023-06-07 17:32
  • 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 = 4 # comes after first separator

########### Configurable Params - END ###########

RPT_COL_CAMPAIGN = 'Campaign'
RPT_COL_ACCOUNT = 'Account'
RPT_COL_TEST = 'Campaign Tactic'
BULK_COL_ACCOUNT = 'Account'
BULK_COL_CAMPAIGN = 'Campaign'
BULK_COL_TEST = 'Campaign Tactic'

# 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

comments powered by Disqus