Pandas dataframe принимает максимальное значение группы для каждой группы, когда groupby - PullRequest
1 голос
/ 04 августа 2020

У меня есть фрейм данных со многими столбцами, 2 - категориальные, а остальные - числовые. c:

df = [type1 , type2 , type3 , val1, val2, val3
       a       b        q       1    2     3
       a       c        w       3    5     2
       b       c        t       2    9     0
       a       b        p       4    6     7
       a       c        m       2    1     8]

Я хочу применить слияние на основе операции groupby(["type1","type2"]), которая создаст максимум значение из сгруппированной строки:

df = [type1 , type2 ,type3, val1, val2, val3 
       a       b       q      2    6     7     
       a       c       w      4    5     8      
       b       c       t      2    9     0      

Пояснение: val3 первой строки - 7, потому что это максимальное значение, когда type1 = a, type2 = b.

Аналогично, val3 второй строки равно 8, потому что это максимальное значение, когда type1 = a, type2 = c.

1 Ответ

0 голосов
/ 04 августа 2020

Если нужно агрегировать все столбцы по max:

df = df.groupby(["type1","type2"]).max()
print (df)
            type3  val1  val2  val3
type1 type2                        
a     b         q     4     6     7
      c         w     3     5     8
b     c         t     2     9     0

Если нужно, чтобы некоторые столбцы агрегировались по-разному, вы можете создать словарь имен столбцов с агрегатными функциями, а затем установить другие агрегированные функции для некоторых столбцов, например, для type3 используется first, а для val1 используется last:

d = dict.fromkeys(df.columns.difference(['type1','type2']), 'max')
d['type3'] = 'first'
d['val1'] = 'last'

df = df.groupby(["type1","type2"], as_index=False, sort=False).agg(d)
print (df)
  type1 type2 type3  val1  val2  val3
0     a     b     q     4     6     7
1     a     c     w     2     5     8
2     b     c     t     2     9     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...