多索引数据帧删除每个组具有最大值的行

Multi index dataframe delete row with maximum value per group(多索引数据帧删除每个组具有最大值的行)

本文介绍了多索引数据帧删除每个组具有最大值的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个多索引数据帧,如下所示:

PID    Fid    x      y

  A      1    2      3
         2    6      1
         3    4      6
  B      1    3      5
         2    2      4
         3    5      7

我想删除每个患者具有最高x值(PID)的行。我需要获得一个包含剩余行和所有列的新数据帧,以继续对这些数据进行分析,例如剩余y值的平均值。 数据帧应如下所示:

PID    Fid    x      y

  A      1    2      3
         3    4      6
  B      1    3      5
         2    2      4

我使用了Python Multiindex Dataframe remove maximum

中的代码
idx = (df.reset_index('Fid')
                   .groupby('PID')['x']
                   .max()
                   .reset_index()
                   .values.tolist())
df_s = df.loc[df.index.difference(idx)]

我可以获取IDX,但不能从数据帧中删除它们。它显示TypeError:Unhasable type:‘list’

我做错了什么?

推荐答案

您可以尝试:

idx = df.groupby(level=0)['x'].idxmax()
df[~df.index.isin(idx)]

         x  y
PID Fid      
A   1    2  3
    3    4  6
B   1    3  5
    2    2  4

您可以在此处使用pd.Index.difference

df.loc[df.index.difference(df['x'].groupby(level=0).idxmax())] #Use level=0 if index is unnamed
                                         #('PID').idxmax())] 
         x  y
PID Fid      
A   1    2  3
    3    4  6
B   1    3  5
    2    2  4

这篇关于多索引数据帧删除每个组具有最大值的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:多索引数据帧删除每个组具有最大值的行