#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