I'm trying to automate a process that JMP does (Analyze->Distribution, entering column A as the "Y value", using subsequent columns as the "weight" value). In JMP you have to do this one column at a time - I'd like to use Python to loop through all of the columns and create an array showing, say, the median of each column. For example, if the mass array is [0, 10, 20, 30], and the weight array for column 1 is [30, 191, 9, 0], the weighted median of the mass array should be 10. However, I'm not sure how to arrive at this answer. So far I've imported the csv showing the weights as an array, masking values of 0, and created an array of the "Y value" the same shape and size as the weights array (113x32). I'm not entirely sure I need to do this, but thought it would be easier than a for loop for the purpose of weighting. I'm not sure exactly where to go from here. Basically the "Y value" is a range of masses, and all of the columns in the array represent the number of data points found for each mass. I need to find the median mass, based on the frequency with which they were reported. I'm not an expert in Python or statistics, so if I've omitted any details that would be useful let me know! Update: here's some code for what I've done so far: #Boilerplate & Import files import csv import scipy as sp from scipy import stats from scipy.stats import norm import numpy as np from numpy import genfromtxt import pandas as pd import matplotlib.pyplot as plt inputFile = '/Users/cl/prov.csv' origArray = genfromtxt(inputFile, delimiter = ",") nArray = np.array(origArray) dimensions = nArray.shape shape = np.asarray(dimensions) #Mask values ==0 maTest = np.ma.masked_equal(nArray,0) #Create array of masses the same shape as the weights (nArray) fieldLength = shape[0] rowLength = shape[1] for i in range (rowLength): createArr = np.arange(0, fieldLength*10, 10) nCreateArr = np.array(createArr) massArr.append(nCreateArr) nCreateArr = np.array(massArr) nmassArr = nCreateArr.transpose() Continue reading...