在大熊猫数据框中的列C中查找最大值,而按列A和B分组

时间:2018-11-20 02:27:47

标签: python pandas

我有一个这样的熊猫数据框:

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和值11Name的列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 :(得分:0)

您可以将groupby与agg一起使用:

使用lambda返回所有相似度,或使用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

答案 1 :(得分:0)

您可能 不需要 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