найти максимальное значение в столбце C в кадре данных панд, а сгруппировать по столбцам A и B - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть датафрейм для панд:

df = pd.DataFrame({"RT":[9,10,10,11,11,11,11],"Quality":[70,60,50,60,80,70,80],'Name' :['a','a','b','c','b','c','b'],'Similarity':[0.98,0.97,0.97,0.95,0.95,0.95,0.95]})

    RT  Quality Name    Similarity
0   9   70      a       0.98
1   10  60      a       0.97
2   10  50      b       0.97
3   11  60      c       0.95
4   11  80      b       0.95
5   11  70      c       0.95
6   11  80      b       0.95

Значения в столбце Similarity совпадают по группам со столбцом RT

Я хочу сгруппировать столбец RT и найти максимальное значение столбца Quality и сгруппировать по столбцу Name.

Например:

В столбце RT значение 11, в котором есть столбец Name, значение c и b, суммировать каждое из значений Quality столбца, затем получить c = 130, b =160 и отсортировать максимальное значение 160, b тогда получите

    RT  Quality Name    Similarity
0   9   70  a       0.98
1   10  60  a       0.97
2   10  50  b       0.97
3   11  160 b       0.95
4   11  130 c       0.95

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Вы можете не нужно agg

df.groupby(['RT','Similarity','Name'],as_index=False)['Quality'].sum()
Out[150]: 
   RT  Similarity Name  Quality
0   9        0.98    a       70
1  10        0.97    a       60
2  10        0.97    b       50
3  11        0.95    b      160
4  11        0.95    c      130
0 голосов
/ 20 ноября 2018

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

используйте лямбду, чтобы вернуть все сходства, или max, чтобы вернуть max

df.groupby(['RT','Name']).agg({'Quality':'sum', 'Similarity':lambda x:x.unique()})

         Quality    Similarity
RT  Name        
9   a     70        0.98
10  a     60        0.97
    b     50        0.97
11  b     160       0.95
    c     130       0.95
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...