Get Row and Column with Minimum value in Entire Pandas DataFrame
The problem is simple and so must be solution but I am not able to find it.
I want to find which row and column in Pandas DataFrame has minimum value and how much is it.
I have tried following code (in addition to various combinations):
df = pd.DataFrame(data=[[4,5,6],[2,1,3],[7,0,5],[2,5,3]],
index = ['R1','R2','R3','R4'],
columns=['C1','C2','C3'])
print(df)
print(df.loc[df.idxmin(axis=0), df.idxmin(axis=1)])
The dataframe (df) being searched is:
C1 C2 C3
R1 4 5 6
R2 2 1 3
R3 7 0 5
R4 2 5 3
Output for the loc
command:
C1 C2 C2 C1
R2 2 1 1 2
R3 7 0 0 7
R2 2 1 1 2
What I need is:
C2
R3 0
How can I get this simple result?
python pandas
add a comment |
The problem is simple and so must be solution but I am not able to find it.
I want to find which row and column in Pandas DataFrame has minimum value and how much is it.
I have tried following code (in addition to various combinations):
df = pd.DataFrame(data=[[4,5,6],[2,1,3],[7,0,5],[2,5,3]],
index = ['R1','R2','R3','R4'],
columns=['C1','C2','C3'])
print(df)
print(df.loc[df.idxmin(axis=0), df.idxmin(axis=1)])
The dataframe (df) being searched is:
C1 C2 C3
R1 4 5 6
R2 2 1 3
R3 7 0 5
R4 2 5 3
Output for the loc
command:
C1 C2 C2 C1
R2 2 1 1 2
R3 7 0 0 7
R2 2 1 1 2
What I need is:
C2
R3 0
How can I get this simple result?
python pandas
Performance is important?
– jezrael
Nov 14 '18 at 6:35
Working with some missing values is most important. Then display and then performance.
– rnso
Nov 14 '18 at 6:46
add a comment |
The problem is simple and so must be solution but I am not able to find it.
I want to find which row and column in Pandas DataFrame has minimum value and how much is it.
I have tried following code (in addition to various combinations):
df = pd.DataFrame(data=[[4,5,6],[2,1,3],[7,0,5],[2,5,3]],
index = ['R1','R2','R3','R4'],
columns=['C1','C2','C3'])
print(df)
print(df.loc[df.idxmin(axis=0), df.idxmin(axis=1)])
The dataframe (df) being searched is:
C1 C2 C3
R1 4 5 6
R2 2 1 3
R3 7 0 5
R4 2 5 3
Output for the loc
command:
C1 C2 C2 C1
R2 2 1 1 2
R3 7 0 0 7
R2 2 1 1 2
What I need is:
C2
R3 0
How can I get this simple result?
python pandas
The problem is simple and so must be solution but I am not able to find it.
I want to find which row and column in Pandas DataFrame has minimum value and how much is it.
I have tried following code (in addition to various combinations):
df = pd.DataFrame(data=[[4,5,6],[2,1,3],[7,0,5],[2,5,3]],
index = ['R1','R2','R3','R4'],
columns=['C1','C2','C3'])
print(df)
print(df.loc[df.idxmin(axis=0), df.idxmin(axis=1)])
The dataframe (df) being searched is:
C1 C2 C3
R1 4 5 6
R2 2 1 3
R3 7 0 5
R4 2 5 3
Output for the loc
command:
C1 C2 C2 C1
R2 2 1 1 2
R3 7 0 0 7
R2 2 1 1 2
What I need is:
C2
R3 0
How can I get this simple result?
python pandas
python pandas
asked Nov 14 '18 at 6:10
rnsornso
11.7k134196
11.7k134196
Performance is important?
– jezrael
Nov 14 '18 at 6:35
Working with some missing values is most important. Then display and then performance.
– rnso
Nov 14 '18 at 6:46
add a comment |
Performance is important?
– jezrael
Nov 14 '18 at 6:35
Working with some missing values is most important. Then display and then performance.
– rnso
Nov 14 '18 at 6:46
Performance is important?
– jezrael
Nov 14 '18 at 6:35
Performance is important?
– jezrael
Nov 14 '18 at 6:35
Working with some missing values is most important. Then display and then performance.
– rnso
Nov 14 '18 at 6:46
Working with some missing values is most important. Then display and then performance.
– rnso
Nov 14 '18 at 6:46
add a comment |
3 Answers
3
active
oldest
votes
Use:
a, b = df.stack().idxmin()
print(df.loc[[a], [b]])
C2
R3 0
Another @John Zwinck solution working with missing values - use numpy.nanargmin
:
df = pd.DataFrame(data=[[4,5,6],[2,np.nan,3],[7,0,5],[2,5,3]],
index = ['R1','R2','R3','R4'],
columns=['C1','C2','C3'])
print(df)
C1 C2 C3
R1 4 5.0 6
R2 2 NaN 3
R3 7 0.0 5
R4 2 5.0 3
#https://stackoverflow.com/a/3230123
ri, ci = np.unravel_index(np.nanargmin(df.values), df.shape)
print(df.iloc[[ri], [ci]])
C2
R3 0.0
Great. Forgot to add in question: there are some np.nan values in real df. Will this code work there as well?
– rnso
Nov 14 '18 at 6:17
@rnso - sure, pandas function working with nans nice.
– jezrael
Nov 14 '18 at 6:17
@rnso - changed solution for working with missing values.
– jezrael
Nov 14 '18 at 6:52
add a comment |
I'd get the index this way:
np.unravel_index(np.argmin(df.values), df.shape)
This is much faster than df.stack().idxmin()
.
It gives you a tuple such as (2, 1)
in your example. Pass that to df.iloc to get the value.
It works but it is not giving row and column names in output. Also will it work if there are some np.nan values in df?
– rnso
Nov 14 '18 at 6:21
@rnso: if you want to ignore NANs, simply usenanargmin
instead ofargmin
. If you want the row and column names, you can usedf.columns[x]
anddf.index[y]
ordf.iloc[[x], [y]]
as in jezrael's answer.
– John Zwinck
Nov 14 '18 at 7:08
add a comment |
Or min
+min
+dropna
+T
+dropna
+T
:
>>> df[df==df.min(axis=1).min()].dropna(how='all').T.dropna().T
C2
R3 0.0
>>>
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53294115%2fget-row-and-column-with-minimum-value-in-entire-pandas-dataframe%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
Use:
a, b = df.stack().idxmin()
print(df.loc[[a], [b]])
C2
R3 0
Another @John Zwinck solution working with missing values - use numpy.nanargmin
:
df = pd.DataFrame(data=[[4,5,6],[2,np.nan,3],[7,0,5],[2,5,3]],
index = ['R1','R2','R3','R4'],
columns=['C1','C2','C3'])
print(df)
C1 C2 C3
R1 4 5.0 6
R2 2 NaN 3
R3 7 0.0 5
R4 2 5.0 3
#https://stackoverflow.com/a/3230123
ri, ci = np.unravel_index(np.nanargmin(df.values), df.shape)
print(df.iloc[[ri], [ci]])
C2
R3 0.0
Great. Forgot to add in question: there are some np.nan values in real df. Will this code work there as well?
– rnso
Nov 14 '18 at 6:17
@rnso - sure, pandas function working with nans nice.
– jezrael
Nov 14 '18 at 6:17
@rnso - changed solution for working with missing values.
– jezrael
Nov 14 '18 at 6:52
add a comment |
Use:
a, b = df.stack().idxmin()
print(df.loc[[a], [b]])
C2
R3 0
Another @John Zwinck solution working with missing values - use numpy.nanargmin
:
df = pd.DataFrame(data=[[4,5,6],[2,np.nan,3],[7,0,5],[2,5,3]],
index = ['R1','R2','R3','R4'],
columns=['C1','C2','C3'])
print(df)
C1 C2 C3
R1 4 5.0 6
R2 2 NaN 3
R3 7 0.0 5
R4 2 5.0 3
#https://stackoverflow.com/a/3230123
ri, ci = np.unravel_index(np.nanargmin(df.values), df.shape)
print(df.iloc[[ri], [ci]])
C2
R3 0.0
Great. Forgot to add in question: there are some np.nan values in real df. Will this code work there as well?
– rnso
Nov 14 '18 at 6:17
@rnso - sure, pandas function working with nans nice.
– jezrael
Nov 14 '18 at 6:17
@rnso - changed solution for working with missing values.
– jezrael
Nov 14 '18 at 6:52
add a comment |
Use:
a, b = df.stack().idxmin()
print(df.loc[[a], [b]])
C2
R3 0
Another @John Zwinck solution working with missing values - use numpy.nanargmin
:
df = pd.DataFrame(data=[[4,5,6],[2,np.nan,3],[7,0,5],[2,5,3]],
index = ['R1','R2','R3','R4'],
columns=['C1','C2','C3'])
print(df)
C1 C2 C3
R1 4 5.0 6
R2 2 NaN 3
R3 7 0.0 5
R4 2 5.0 3
#https://stackoverflow.com/a/3230123
ri, ci = np.unravel_index(np.nanargmin(df.values), df.shape)
print(df.iloc[[ri], [ci]])
C2
R3 0.0
Use:
a, b = df.stack().idxmin()
print(df.loc[[a], [b]])
C2
R3 0
Another @John Zwinck solution working with missing values - use numpy.nanargmin
:
df = pd.DataFrame(data=[[4,5,6],[2,np.nan,3],[7,0,5],[2,5,3]],
index = ['R1','R2','R3','R4'],
columns=['C1','C2','C3'])
print(df)
C1 C2 C3
R1 4 5.0 6
R2 2 NaN 3
R3 7 0.0 5
R4 2 5.0 3
#https://stackoverflow.com/a/3230123
ri, ci = np.unravel_index(np.nanargmin(df.values), df.shape)
print(df.iloc[[ri], [ci]])
C2
R3 0.0
edited Nov 14 '18 at 6:51
answered Nov 14 '18 at 6:15
jezraeljezrael
333k24276352
333k24276352
Great. Forgot to add in question: there are some np.nan values in real df. Will this code work there as well?
– rnso
Nov 14 '18 at 6:17
@rnso - sure, pandas function working with nans nice.
– jezrael
Nov 14 '18 at 6:17
@rnso - changed solution for working with missing values.
– jezrael
Nov 14 '18 at 6:52
add a comment |
Great. Forgot to add in question: there are some np.nan values in real df. Will this code work there as well?
– rnso
Nov 14 '18 at 6:17
@rnso - sure, pandas function working with nans nice.
– jezrael
Nov 14 '18 at 6:17
@rnso - changed solution for working with missing values.
– jezrael
Nov 14 '18 at 6:52
Great. Forgot to add in question: there are some np.nan values in real df. Will this code work there as well?
– rnso
Nov 14 '18 at 6:17
Great. Forgot to add in question: there are some np.nan values in real df. Will this code work there as well?
– rnso
Nov 14 '18 at 6:17
@rnso - sure, pandas function working with nans nice.
– jezrael
Nov 14 '18 at 6:17
@rnso - sure, pandas function working with nans nice.
– jezrael
Nov 14 '18 at 6:17
@rnso - changed solution for working with missing values.
– jezrael
Nov 14 '18 at 6:52
@rnso - changed solution for working with missing values.
– jezrael
Nov 14 '18 at 6:52
add a comment |
I'd get the index this way:
np.unravel_index(np.argmin(df.values), df.shape)
This is much faster than df.stack().idxmin()
.
It gives you a tuple such as (2, 1)
in your example. Pass that to df.iloc to get the value.
It works but it is not giving row and column names in output. Also will it work if there are some np.nan values in df?
– rnso
Nov 14 '18 at 6:21
@rnso: if you want to ignore NANs, simply usenanargmin
instead ofargmin
. If you want the row and column names, you can usedf.columns[x]
anddf.index[y]
ordf.iloc[[x], [y]]
as in jezrael's answer.
– John Zwinck
Nov 14 '18 at 7:08
add a comment |
I'd get the index this way:
np.unravel_index(np.argmin(df.values), df.shape)
This is much faster than df.stack().idxmin()
.
It gives you a tuple such as (2, 1)
in your example. Pass that to df.iloc to get the value.
It works but it is not giving row and column names in output. Also will it work if there are some np.nan values in df?
– rnso
Nov 14 '18 at 6:21
@rnso: if you want to ignore NANs, simply usenanargmin
instead ofargmin
. If you want the row and column names, you can usedf.columns[x]
anddf.index[y]
ordf.iloc[[x], [y]]
as in jezrael's answer.
– John Zwinck
Nov 14 '18 at 7:08
add a comment |
I'd get the index this way:
np.unravel_index(np.argmin(df.values), df.shape)
This is much faster than df.stack().idxmin()
.
It gives you a tuple such as (2, 1)
in your example. Pass that to df.iloc to get the value.
I'd get the index this way:
np.unravel_index(np.argmin(df.values), df.shape)
This is much faster than df.stack().idxmin()
.
It gives you a tuple such as (2, 1)
in your example. Pass that to df.iloc to get the value.
answered Nov 14 '18 at 6:18
John ZwinckJohn Zwinck
152k16176291
152k16176291
It works but it is not giving row and column names in output. Also will it work if there are some np.nan values in df?
– rnso
Nov 14 '18 at 6:21
@rnso: if you want to ignore NANs, simply usenanargmin
instead ofargmin
. If you want the row and column names, you can usedf.columns[x]
anddf.index[y]
ordf.iloc[[x], [y]]
as in jezrael's answer.
– John Zwinck
Nov 14 '18 at 7:08
add a comment |
It works but it is not giving row and column names in output. Also will it work if there are some np.nan values in df?
– rnso
Nov 14 '18 at 6:21
@rnso: if you want to ignore NANs, simply usenanargmin
instead ofargmin
. If you want the row and column names, you can usedf.columns[x]
anddf.index[y]
ordf.iloc[[x], [y]]
as in jezrael's answer.
– John Zwinck
Nov 14 '18 at 7:08
It works but it is not giving row and column names in output. Also will it work if there are some np.nan values in df?
– rnso
Nov 14 '18 at 6:21
It works but it is not giving row and column names in output. Also will it work if there are some np.nan values in df?
– rnso
Nov 14 '18 at 6:21
@rnso: if you want to ignore NANs, simply use
nanargmin
instead of argmin
. If you want the row and column names, you can use df.columns[x]
and df.index[y]
or df.iloc[[x], [y]]
as in jezrael's answer.– John Zwinck
Nov 14 '18 at 7:08
@rnso: if you want to ignore NANs, simply use
nanargmin
instead of argmin
. If you want the row and column names, you can use df.columns[x]
and df.index[y]
or df.iloc[[x], [y]]
as in jezrael's answer.– John Zwinck
Nov 14 '18 at 7:08
add a comment |
Or min
+min
+dropna
+T
+dropna
+T
:
>>> df[df==df.min(axis=1).min()].dropna(how='all').T.dropna().T
C2
R3 0.0
>>>
add a comment |
Or min
+min
+dropna
+T
+dropna
+T
:
>>> df[df==df.min(axis=1).min()].dropna(how='all').T.dropna().T
C2
R3 0.0
>>>
add a comment |
Or min
+min
+dropna
+T
+dropna
+T
:
>>> df[df==df.min(axis=1).min()].dropna(how='all').T.dropna().T
C2
R3 0.0
>>>
Or min
+min
+dropna
+T
+dropna
+T
:
>>> df[df==df.min(axis=1).min()].dropna(how='all').T.dropna().T
C2
R3 0.0
>>>
answered Nov 14 '18 at 6:23
U9-ForwardU9-Forward
15.2k41438
15.2k41438
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53294115%2fget-row-and-column-with-minimum-value-in-entire-pandas-dataframe%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Performance is important?
– jezrael
Nov 14 '18 at 6:35
Working with some missing values is most important. Then display and then performance.
– rnso
Nov 14 '18 at 6:46