Получение значений с использованием функции python - pandas groupby-aggregate - PullRequest
0 голосов
/ 17 июня 2020

Итак, у меня есть фрейм данных, который выглядит так:

    Date       Forward_Date    A    B    C    D   Amount
    2010-01-01  2010-02-01     a    a    a    a     20
    2010-01-01  2010-03-01     b    b    b    b     10
    2010-01-01  2010-04-01     c    c    c    c      5
    2010-01-02  2010-02-01     d    d    d    d     15
    2010-01-02  2010-03-01     e    f    e    e     30
    2010-01-02  2010-04-01     f    f    f    f     70 

Я хотел бы получить примерно следующее:

    Date       Forward_Date    A    B    C    D   Amount
    2010-01-01  2010-02-01     a    a    a    a     20
    2010-01-02  2010-04-01     f    f    f    f     70 

Итак, я хочу выбрать эти уникальные записи из столбца Date, где сумма максимальна, а затем заполните другие ячейки соответствующими данными.

Я попробовал df.groupby(df['Date']).agg({'Amount':'max'}).reset_index(), что дает мне следующее:

    Date          Amount
    2010-01-01      20
    2010-01-02      70 

Но я не могу получить другие столбцы для заполнения с использованием пересечения этих двух значений столбца. Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

0 голосов
/ 17 июня 2020

Самым простым решением будет слияние (внутреннее соединение) вашего вывода по дате и сумме обратно во входную таблицу и получение требуемых столбцов ex:

pd.merge(df,df.groupby(df['Date']).agg({'Amount':'max'}).reset_index(),on=['Date','Amount'])

Это даст вам всю строку по дате, содержащую максимальная сумма

0 голосов
/ 17 июня 2020
• 1000 * Обратите внимание, что решения, предоставленные Mani sh и Sammy, также отлично работают и приводят к одному и тому же фрейму данных. Ура!
0 голосов
/ 17 июня 2020

Установите столбец Date в качестве индекса, выполните группировку по столбцу Amount, получите логическое значение для строк в исходном фрейме данных, которые равны результату groupby, и индексируйте с помощью loc:

df = df.set_index("Date")

df.loc[lambda x: x.Amount.eq(df.groupby("Date").Amount.max())]

        Forward_Date    A   B   C   D   Amount
Date                        
2010-01-01  2010-02-01  a   a   a   a   20
2010-01-02  2010-04-01  f   f   f   f   70
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...