这里uid和id是索引。该数据框是从单个索引数据框转换而来的,因此某些列存在重复值。对于每个uid,avg_diff的所有值都是相同的,但不同的uid将具有不同的该字段值。我想要获得具有不同 uid 的最大 10 个 avg_diff 值。
注意:这是一个巨大的数据框,所以我正在寻找最优化的方法。
最佳答案
我认为你可以先通过 get_level_values
删除重复项和 duplicated
与 boolean indexing
, ~
用于反转 bool 掩码。
然后使用 DataFrame.nlargest
或sort_values
+ head
:
df = pd.DataFrame({'uid':[1,1,1,2,2,3,3], 'id':[2,3,4,5,6,1,3],
'avg_diff':[0.1,0.1,0.1,0.2,0.2,0.3,0.3]})
df = df.set_index('uid').set_index('id', drop=False, append=True)
print (df)
avg_diff id
uid id
1 2 0.1 2
3 0.1 3
4 0.1 4
2 5 0.2 5
6 0.2 6
3 1 0.3 1
3 0.3 3
<小时/>
mask = df.index.get_level_values('uid').duplicated()
print (~mask)
[ True False False True False True False]
df = df[~mask].nlargest(2, 'avg_diff')
print (df)
avg_diff id
uid id
3 1 0.3 1
2 5 0.2 5
另一个解决方案:
mask = df.index.get_level_values('uid').duplicated()
print (~mask)
[ True False False True False True False]
df = df[~mask].sort_values('avg_diff', ascending=False).head(2)
print (df)
avg_diff id
uid id
3 1 0.3 1
2 5 0.2 5
关于python - 从多索引数据框中获取n个最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44404833/