Advertisement
Guest User

Untitled

a guest
Apr 28th, 2015
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. def wmean_ungrouped (d,w):
  2. return (d.dot(w)).sum() / w.sum()
  3.  
  4. def wmean_grouped (group, var_name_in, var_name_weight):
  5. d = group[var_name_in]
  6. w = group[var_name_weight]
  7. return (d * w).sum() / w.sum()
  8.  
  9. FUNCS = {
  10. "mean" : np.mean ,
  11. "sum" : np.sum ,
  12. "count" : np.count_nonzero
  13. }
  14.  
  15. def my_summary (
  16. data ,
  17. var_names_in ,
  18. var_names_out ,
  19. var_functions ,
  20. var_name_weight = None ,
  21. var_names_group = None
  22. ):
  23. result = DataFrame()
  24.  
  25. if var_names_group is not None:
  26. grouped = data.groupby (var_names_group)
  27. for var_name_in, var_name_out, var_function in
  28. zip(var_names_in,var_names_out,var_functions):
  29. if var_function == "wmean":
  30. func = lambda x : wmean_grouped (x, var_name_in, var_name_weight)
  31. result[var_name_out] = Series(grouped.apply(func))
  32. else:
  33. func = FUNCS[var_function]
  34. result[var_name_out] = grouped[var_name_in].apply(func)
  35. else:
  36. for var_name_in, var_name_out, var_function in
  37. zip(var_names_in,var_names_out,var_functions):
  38. if var_function == "wmean":
  39. result[var_name_out] =
  40. Series(wmean_ungrouped(data[var_name_in], data[var_name_weight]))
  41. else:
  42. func = FUNCS[var_function]
  43. result[var_name_out] = Series(func(data[var_name_in]))
  44.  
  45. return result
  46.  
  47. my_summary (
  48. data=df,
  49. var_names_in=["val_2","val_2","val_2","val_2"] ,
  50. var_names_out=[
  51. "val_2_c","val_2_s","val_2_m","val_2_wmean"
  52. ] ,
  53. var_functions=["count","sum","mean","wmean"] ,
  54. var_name_weight="val_1"
  55. ,
  56. var_names_group=["Region","Category"]
  57. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement