Python 根据聚合,如何选择输出列。

Python 根据聚合,如何选择输出列。,python,numpy,pandas,Python,Numpy,Pandas,我有如下示例中的数据,Sub是唯一的,但Que不是。Cov是Sub和Que之间的关系。如果有多个Que与同一Sub匹配,我想选择具有最大Cov的Que Ss示例S2与3 Que匹配: dt = DataFrame([['s1', 'q1', 1], ['s2', 'q2', 1.5], ['s2', 'q3', 2.3], ['s2', 'q4', 2], ['s3', 'q5', 4]], columns = ['Sub', 'Que', 'Cov']) dup_counts = dt.gro

我有如下示例中的数据,Sub是唯一的,但Que不是。Cov是Sub和Que之间的关系。如果有多个Que与同一Sub匹配,我想选择具有最大Cov的Que

Ss示例S2与3 Que匹配:

dt = DataFrame([['s1', 'q1', 1], ['s2', 'q2', 1.5], ['s2', 'q3', 2.3], ['s2', 'q4', 2], ['s3', 'q5', 4]], columns = ['Sub', 'Que', 'Cov'])
dup_counts = dt.groupby(["Sub" ,"Que"]).Que.count().groupby(level='Sub').count()
print(dup_counts.head())

Sub
s1     1
s2     3
s3     1
dtype: int64
下面的代码几乎实现了我想要的功能,它返回每个子组件的最大Cov。我还想知道与该Cov关联的Que

dup_max = dt.groupby(["Sub","Que"]).Cov.max().groupby(level="Sub").max()
print(dup_max.head())

Sub
s1     1.0
s2     2.3
s3     4.0
dtype: float64
这就是我想要的

Sub    Que   Cov
s1     q1    1.0
s2     q3    2.3
s3     q5    4.0
另见

idx = dt.groupby('Sub').Cov.idxmax()
dt.iloc[idx]
Out[483]: 
  Sub Que  Cov
0  s1  q1  1.0
2  s2  q3  2.3
4  s3  q5  4.0