Pandas groupby聚合,如何选择输出列。

时间:2014-08-20 15:19:31

标签: 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.groupby(["Sub" ,"Que"]).Que.count().groupby(level='Sub').count()
print(dup_counts.head())

Sub
s1     1
s2     3
s3     1
dtype: int64

以下代码几乎完成了我想要的操作,它返回每个Sub的最大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

1 个答案:

答案 0 :(得分:1)

另见this similar question

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