我有一个像这样的多索引数据框:
PID Fid x y
A 1 2 3
2 6 1
3 4 6
B 1 3 5
2 2 4
3 5 7
我想删除每个患者 (PID) 具有最高 x 值的行。我需要获取一个包含剩余行和所有列的新数据框,以继续对这些数据进行分析,例如剩余 y 值的平均值。
数据框应如下所示:
PID Fid x y
A 1 2 3
3 4 6
B 1 3 5
2 2 4
我使用的代码来自Python多索引数据框删除最大值 https://stackoverflow.com/questions/49669129/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: unhashable 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
Or
您可以使用pd.Index.difference
here.
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)