Michael Green
Michael Green

Reputation: 820

finding the indexes of the global min pandas

Suppose you have numerical data for some function z = f(x, y) saved in a pandas dataframe, where x is the index values, y is the column values, and the dataframe is populated with the z data. For example:

       0.0       0.1       0.2       0.3       0.4       0.5       0.6   
1.0    0.0 -0.002961 -0.005921 -0.008883 -0.011845 -0.014808 -0.017772  
1.1    0.0 -0.002592 -0.005184 -0.007777 -0.010371 -0.012966 -0.015563 
1.2    0.0 -0.002084 -0.004168 -0.006253 -0.008340 -0.010428 -0.012517

is there a simple pandas command, or maybe a one-line string of a few simple commands, which returns the (x, y) values corresponding to data attributes, specifically in my case as min(z)? In the example data I'd be looking for (1.0, 0.6)

I'm really just hoping there's an answer that doesn't involve parsing out the data into some other structure, because sure, just linearize the data in a numpy array and correlate the numpy array index with (x,y). But if there's something cleaner/more elegant that I simply am not finding, I'd love to learn about it.

Upvotes: 2

Views: 1015

Answers (1)

Trenton McKinney
Trenton McKinney

Reputation: 62463

Using pandas.DataFrame.idxmin & pandas.Series.idxmin

import pandas as pd

# df view
     0.0       0.1       0.2       0.3       0.4       0.5       0.6
1.0  0.0 -0.002961 -0.005921 -0.008883 -0.011845 -0.014808 -0.017772
1.1  0.0 -0.002592 -0.005184 -0.007777 -0.010371 -0.012966 -0.015563
1.2  0.0 -0.002084 -0.004168 -0.006253 -0.008340 -0.010428 -0.012517

# min column
min_col_name = df.min().idxmin()

# min column index if needed
min_col_idx = df.columns.get_loc(min_col_name)

# min row index
min_row_idx = df[min_col_name].idxmin()

another option:

(df.min(axis=1).idxmin(), df.min().idxmin())

Upvotes: 3

Related Questions