我有一个这样的熊猫数据框:
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
答案 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