Получить строку и столбец с минимальным значением в DataFrame для всей панды - PullRequest
0 голосов
/ 14 ноября 2018

Проблема проста и поэтому должна быть решена, но я не могу ее найти.

Я хочу узнать, какая строка и столбец в Pandas DataFrame имеют минимальное значение и сколько оно стоит.

Я пробовал следующий код (в дополнение к различным комбинациям):

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)])

Идет поиск кадра данных (df):

    C1  C2  C3
R1   4   5   6
R2   2   1   3
R3   7   0   5
R4   2   5   3

Вывод команды loc:

    C1  C2  C2  C1
R2   2   1   1   2
R3   7   0   0   7
R2   2   1   1   2

Что мне нужно, это:

    C2
R3   0

Как я могу получить этот простой результат?

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

Я бы получил индекс следующим образом:

np.unravel_index(np.argmin(df.values), df.shape)

Это намного быстрее, чем df.stack().idxmin().

В вашем примере это кортеж типа (2, 1). Передайте это в df.iloc [], чтобы получить значение.

0 голосов
/ 14 ноября 2018

Или min + min + dropna + T + dropna + T:

>>> df[df==df.min(axis=1).min()].dropna(how='all').T.dropna().T
     C2
R3  0.0
>>> 
0 голосов
/ 14 ноября 2018

Использование:

a, b = df.stack().idxmin()
print(df.loc[[a], [b]])
    C2
R3   0

Другое решение @John Zwinck, работающее с пропущенными значениями - используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...