Starting like @HenrikSchumacher suggests: data = Join[RandomReal[{0, 4}, {5, 6, 780, 90, 1}], RandomReal[{0, 1}, {5, 6, 780, 90, 1}], 5]; data1 = Flatten[data, 3]; For each data point, round the $x$-coordinate down to the nearest thousandth (you may use `Round` instead of `Floor` to define the bins, depending on what exactly you need): data2 = {Floor[#[[1]], 0.001], #[[2]]} & /@ data1; Gather together all data points with the same $x$-coordinate (rounded down to the nearest thousandth): A = GatherBy[data2, First]; From these gathered lists, calculate for each bin (i) the $x$-value and (ii) the sum of the $y$-values (or the mean, or length, or whatever): B = (#[[1, 1]] -> Total[#[[All, 2]]]) & /@ A; The results in `B` are in random order. Make an ordered list of all bins and their sum: bins = Range[0, 4, 0.001]; Transpose[{bins, Lookup[B, bins, 0]}] > {{0, ...}, {0.001, ...}, {0.002, ...}, ..., {4, ...}} (The dots stand for the sum values in each bin.)