code: def numpy_weighted_median(data, weights=None):
      
      import numpy as np
      if weights is None:
          return np.median(np.array(data).flatten())
      data, weights = np.array(data).flatten(), np.array(weights).flatten()
      if any(weights > 0):
          sorted_data, sorted_weights = map(np.array, zip(*sorted(zip(data, weights))))
          midpoint = 0.5 * sum(sorted_weights)
          if any(weights > midpoint):
              return (data[weights == np.max(weights)])[0]
          cumulative_weight = np.cumsum(sorted_weights)
          below_midpoint_index = np.where(cumulative_weight <= midpoint)[0][-1]
          if cumulative_weight[below_midpoint_index] - midpoint < sys.float_info.epsilon:
              return np.mean(sorted_data[below_midpoint_index:below_midpoint_index+2])
          return sorted_data[below_midpoint_index+1]
docs: Calculate the weighted median of an array/list using numpy.