Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort 2D array (numpy.ndarray) based to the second column in python? [duplicate]

Tags:

I'm trying to convert all my codes to Python. I want to sort an array which has two columns so that the sorting must be based on the 2th column in the ascending order. Then I need to sum the first column data (from first line to, for example, 100th line). I used "Data.sort(axis=1)", but it doesn't work. Does anyone have any idea to solve this problem?

like image 267
Sam Avatar asked Mar 27 '14 20:03

Sam


People also ask

How do you sort a 2D NumPy array based on two columns?

Sorting 2D Numpy Array by column at index 1 Select the column at index 1 from 2D numpy array i.e. It returns the values at 2nd column i.e. column at index position 1 i.e. Now get the array of indices that sort this column i.e. It returns the index positions that can sort the above column i.e.

How do you sort a NumPy array by a specific column in a 2D array?

NumPy arrays can be sorted by a single column, row, or by multiple columns or rows using the argsort() function. The argsort function returns a list of indices that will sort the values in an array in ascending value.

How do you sort a 2D NumPy array in descending order in Python?

Sort the rows of a 2D array in descending order The code axis = 1 indicates that we'll be sorting the data in the axis-1 direction, and by using the negative sign in front of the array name and the function name, the code will sort the rows in descending order.


1 Answers

Use .argsort() it returns an numpy.array of indices that sort the given numpy.array. You call it as a function or as a method on your array. For example, suppose you have

import numpy as np  arr = np.array([[-0.30565392, -0.96605562],                 [ 0.85331367, -2.62963495],                 [ 0.87839643, -0.28283675],                 [ 0.72676698,  0.93213482],                 [-0.52007354,  0.27752806],                 [-0.08701666,  0.22764316],                 [-1.78897817,  0.50737573],                 [ 0.62260038, -1.96012161],                 [-1.98231706,  0.36523876],                 [-1.07587382, -2.3022289 ]]) 

You can now call .argsort() on the column you want to sort, and it will give you an array of row indices that sort that particular column which you can pass as an index to your original array.

>>> arr[arr[:, 1].argsort()] array([[ 0.85331367, -2.62963495],        [-1.07587382, -2.3022289 ],        [ 0.62260038, -1.96012161],        [-0.30565392, -0.96605562],        [ 0.87839643, -0.28283675],        [-0.08701666,  0.22764316],        [-0.52007354,  0.27752806],        [-1.98231706,  0.36523876],        [-1.78897817,  0.50737573],        [ 0.72676698,  0.93213482]]) 

You can equivalently use numpy.argsort()

>>> arr[np.argsort(arr[:, 1])] array([[ 0.85331367, -2.62963495],        [-1.07587382, -2.3022289 ],        [ 0.62260038, -1.96012161],        [-0.30565392, -0.96605562],        [ 0.87839643, -0.28283675],        [-0.08701666,  0.22764316],        [-0.52007354,  0.27752806],        [-1.98231706,  0.36523876],        [-1.78897817,  0.50737573],        [ 0.72676698,  0.93213482]]) 
like image 162
JaminSore Avatar answered Nov 03 '22 21:11

JaminSore