python - 从多索引数据框中获取n个最大值

标签 python pandas dataframe multi-index

我有一个数据框,如下图所示: enter image description here

这里uid和id是索引。该数据框是从单个索引数据框转换而来的,因此某些列存在重复值。对于每个uidavg_diff的所有值都是相同的,但不同的uid将具有不同的该字段值。我想要获得具有不同 uid 的最大 10 个 avg_diff 值。

注意:这是一个巨大的数据框,所以我正在寻找最优化的方法。

最佳答案

我认为你可以先通过 get_level_values 删除重复项和 duplicatedboolean indexing , ~ 用于反转 bool 掩码。

然后使用 DataFrame.nlargestsort_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/

相关文章:

python - 卷中的持久(本地)dynamoDB 数据缺乏权限 - 无法打开数据库文件

python - 如何通过 Github API 更新 pull 请求

python - "min() arg is an empty sequence"尝试将我的 Pandas plotly 转换为 plotly 时

r - 根据日期列按组获取最新的非 NA 值

dataframe - 如何在 Julia 中将带有标题的矩阵( Array{Any,2} )转换为 DataFrame 而不丢失列顺序?

python - “numpy.float64”对象不可迭代 - 均值漂移聚类

python - 通过 Power BI/Python/Tableau 连接时,ODBC/JDBC 驱动程序与 Azure 的连接失败并出现 401/403 错误

python - 在 matplotlib Python 中设置不同的条形颜色

python - pandas 在 groupby 上设置 withcopywarning

python - 如何从列表中选择只有 6 列的数据框