使用pandas groupby获取对应最小值的行

5

我有一个表需要按条件分组:

R_num ORG name level
13    Dm   Ad   17
13    Dm   Af   16

当我使用它时,它会给我 13 Dm Ad 16,这就像是数据被操纵了。

df1=df.reset_index().groupby(['R_num','ORG']).agg({'name':'first','level':['min']})

我想要的结果是 13 Dm Af 16,我知道可能是 'name':'first' 出了问题,请问如何修复呢?
谢谢。

是的,我做了,那是我的原始代码,但 reset_index 与不匹配的结果无关。 - S.Gu
2个回答

5

如果我理解正确,您应该使用 groupbyidxmin

# df.loc[df.groupby(['R_num','ORG'])['level'].agg('idxmin')]
df.loc[df.groupby(['R_num','ORG'])['level'].idxmin()]

   R_num ORG name  level
1     13  Dm   Af     16

Pfff. 我差点就成功了,但是我的语法有误:df.groupby(['R_num','ORG']).apply(pd.DataFrame.__getitem__, 'level').apply(pd.DataFrame.idxmin)。当你像上面那样索引 GroupBy 对象(例如使用 ['level'])时,这是否会返回一个普通的 Series - tel
@tel 是的,它返回一个以分组键作为索引的系列。 - cs95
1
找一个替代方案 :-) - BENY

3

sort_values 之后使用 drop_duplicates

newdf = df.sort_values('level').drop_duplicates(['R_num','ORG'])
newdf
   R_num ORG name  level
1     13  Dm   Af     16

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接