Проблема с группировкой по максимальному периоду в фрейме данных pandas - PullRequest
3 голосов
/ 01 августа 2020

Я все еще новичок с python, и у меня возникают проблемы с попыткой сгруппировать некоторые данные, чтобы показать ту запись с самой высокой (максимальной) датой, фрейм данных выглядит следующим образом:

enter image description here ... введите описание изображения здесь

Я пробую следующее:

df_2 = df.max(axis = 0) 
df_2 = df.periodo.max()
df_2 = df.loc[df.groupby('periodo').periodo.idxmax()]

И это возвращает мне:

Timestamp('2020-06-01 00:00:00')

periodo    2020-06-01 00:00:00
valor                  3.49136 

Хотя значение для 'periodo' правильное, для "доблесть" это не так, поскольку мне нужно получить соответствующую полную запись ("период" и "значение"), а не максимум каждой из них. Я пробовал другие способы, но не могу получить то, что хочу ...

Мне нужно сделать?

Заранее благодарю, буду внимателен к вашим ответам!

С уважением!

Ответы [ 2 ]

3 голосов
/ 01 августа 2020
# import packages we need, seed random number generator
import pandas as pd
import datetime
import random
random.seed(1)

Создать пример кадра данных

dates = [single_date for single_date in (start_date + datetime.timedelta(n) for n in range(day_count))]
values = [random.randint(1,1000) for _ in dates]
df = pd.DataFrame(zip(dates,values),columns=['dates','values'])

ie df будет:

    dates    values
0   2020-01-01  389
1   2020-01-02  808
2   2020-01-03  215
3   2020-01-04  97
4   2020-01-05  500
5   2020-01-06  30
6   2020-01-07  915
7   2020-01-08  856
8   2020-01-09  400
9   2020-01-10  444

Выбрать строки с наибольшим значением в каждом столбце

Вы можете сделать:

df[df['dates'] == df['dates'].max()]

(Или, если хотите использовать idxmax, можете сделать: df.loc[[df['dates'].idxmax()]])

Возврат:

    dates   values
9   2020-01-10  444

ie это строка с последней датой

&

df[df['values'] == df['values'].max()]

(Или, если хотите снова использовать idxmax, можно сделать: df.loc[[df['values'].idxmax()]] - как в Scott Boston s answer .)

и

    dates   values
6   2020-01-07  915

ie это строка с наибольшим значением в столбце values .

Ссылка .

2 голосов
/ 01 августа 2020

Думаю, вам нужно что-то вроде:

df.loc[[df['valor'].idxmax()]]

Где вы используете idxmax в столбце «доблесть». Затем используйте этот индекс для выбора этой строки.

MVCE:

import pandas as pd
import numpy as np

np.random.seed(123)
df = pd.DataFrame({'periodo':pd.date_range('2018-07-01', periods = 600, freq='d'), 
                  'valor':np.random.random(600)+3})

df.loc[[df['valor'].idxmax()]]

Вывод:

       periodo     valor
474 2019-10-18  3.998918
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...