Получение максимальных и минимальных значений в кадре данных

#python-3.x #pandas

Вопрос:

Здравствуйте, у меня есть фрейм данных, в котором есть два столбца, в которых я хотел получить минимальные и максимальные значения фрейма данных. Я новичок в фрейме данных pandas. Кто-нибудь посоветует мне, как я могу это сделать

df=

   data1 data2   name
   100   200    cand1
   300   400    cand1
   400   100    cand1
 

из приведенного выше примера мой вывод должен выглядеть так, как показано ниже

   data1  data2   name
   400    100    cand1
 

Я пробовал отдельные столбцы, такие как

df[data1].max()
df[data2].min() но это я хочу, чтобы в кадре данных подсказали мне

Комментарии:

1. Во-первых, я не думаю df[data1].max() , что это действительно сработает, вам не хватает апострофа '...' . во-вторых, какого результата вы на самом деле ожидаете? в чем проблема с выводом, который вы опубликовали в своем вопросе?

Ответ №1:

Вы можете использовать groupby_agg :

 >>> df.groupby('name', as_index=False).agg({'data1': max, 'data2': min})
    name  data1  data2
0  cand1    400    100
 

Комментарии:

1. @ShrilaxmiMS. Вы выбираете ответ с помощью 3 операций, а не одной. Если у вас есть новое имя (cand2) в вашем фрейме данных, выбранное решение не будет работать.

Ответ №2:

Вам почти удалось сделать это правильно, поэтому требуется лишь небольшая помощь, чтобы заставить его работать так, как вы хотите. Не нужно никаких группировок или чего — то более сложного.

Сначала мы создаем аналогичный фрейм данных, который у вас есть.

 df = pd.DataFrame({'data1': [100, 200, 400], 'data2': [200, 400, 100], 'name': ['cand1', 'cand1', 'cand1']})
 

Затем мы берем максимальное и минимальное значения столбцов «data1» и «data2» соответственно.

 df['data1'] = df.data1.max()    
df['data2'] = df.data2.min()
 

Наконец, мы отбрасываем все строки, кроме первой.

 df = df.iloc[0:1,:]
 

И теперь у нас есть df, как вам и нужно.

 data1  data2   name
400    100     cand1