Script 169: Budget Threshold

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 tag is extracted from the campaign name by splitting it using a separator and selecting the value after the first separator. The script then checks if the extracted tag is different from the existing tag in the input data. If it is different, the script updates the output data with the new tag. The script also filters out rows with empty tags in the output data.

Walking Through the Code

  1. The script starts by defining configurable parameters, such as the separator used to split the campaign name and the location of the tag in the split values.
  2. The script defines column constants for the input and output data.
  3. The script defines a function get_tag_from_campaign_name that takes a campaign name as input and returns the tag extracted from it.
  4. The script creates a copy of the input data as the output data.
  5. The script iterates through each row in the input data.
  6. For each row, the script extracts the existing tag and the campaign name.
  7. The script calls the get_tag_from_campaign_name function to extract the tag from the campaign name.
  8. The script prints the campaign name and the extracted tag.
  9. The script checks if the extracted tag is different from the existing tag.
  10. If the tag is different, the script updates the output data with the new tag.
  11. If the tag is empty or not different, the script sets the output data to NaN for that row.
  12. The script filters out rows with empty tags in the output data.
  13. The script checks if the output data is empty and prints the tableized output data if it is not empty. Otherwise, it prints “Empty outputDf”.

Vitals

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

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

RPT_COL_CAMPAIGN = 'Campaign'
RPT_COL_ACCOUNT = 'Account'
RPT_COL_TEST = 'Budget Threshold'
BULK_COL_ACCOUNT = 'Account'
BULK_COL_CAMPAIGN = 'Campaign'
BULK_COL_TEST = 'Budget Threshold'

# 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