Guest User

Untitled

a guest
Jan 17th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #!/usr/bin/python
  2. __author__='Semyon Teplisky'
  3.  
  4. import functools
  5. import pandas as pd
  6. import numpy as np
  7.  
  8. raw_data = [{'campaign_id':1111,'medium_id':'msn','campaign_name': 'viral #1', 'clicks':100, 'ctr':0.7},
  9. {'campaign_id':1111,'medium_id':'aol','campaign_name': 'viral #1', 'clicks':250, 'ctr':0.4},
  10. {'campaign_id':1111,'medium_id':'google','campaign_name': 'viral #1', 'clicks':500, 'ctr':0.1}]
  11.  
  12. data = pd.DataFrame(raw_data)
  13.  
  14.  
  15. # Option 1 Advanced with functools
  16. def wavg(val, df, weight):
  17. try:
  18. w = df.ix[val.index][weight]
  19. return (val * w).sum() / w.sum()
  20. except ZeroDivisionError:
  21. return val.mean()
  22.  
  23. # Binding df to function with functools
  24. fwavg = functools.partial(wavg, df=data, weight='clicks')
  25.  
  26. gdata = data.groupby(['campaign_id']).agg({"conversions":np.sum, "impressions":np.sum,
  27. "spend":np.sum,"clicks":np.sum, "ctr":fwavg}).reset_index()
  28. gdata.fillna(0.0, inplace=True)
  29. gdata.head()
  30.  
  31. # Option 2 Math Workaround
  32. data['ctr'] = data['clicks'] * data['ctr']
  33.  
  34. gdata = data.groupby(['campaign_id']).agg({"conversions":np.sum, "impressions":np.sum,
  35. "spend":np.sum,"clicks":np.sum, "ctr":np.sum}).reset_index()
  36. gdata['ctr'] = gdata['ctr'] / gdata['clicks']
  37. gdata.head()
  38.  
  39. # Option 3 Two DF
  40. def wavg(group, avg_name, weight_name):
  41. val = group[avg_name]
  42. w = group[weight_name]
  43. try:
  44. return (val * w).sum() / w.sum()
  45. except ZeroDivisionError:
  46. return val.mean()
  47.  
  48. gdata = data.groupby(['campaign_id'])
  49. data_ctr = gdata.apply(wavg, "ctr", "clicks")
  50. data_meta = gdata.agg({"conversions":np.sum, "impressions":np.sum, "spend":np.sum,"clicks":np.sum})
  51. gdata = pd.merge(data_meta, data_ctr, on='campaign_id')
  52. gdata.head()
Add Comment
Please, Sign In to add comment