【问题标题】:pandas multi index sort specific fieldspandas 多索引排序特定字段
【发布时间】:2017-03-05 04:43:03
【问题描述】:

我通过对分组数据帧运行 series.describe() 在 pandas 中获得了多索引。如何按modelName.mean 对这些系列排序 并只保留特定字段? 这个

summary.sortlevel(1)['kappa']

对它们进行排序,但保留所有其他字段,例如计数。怎么只保留meanstd

编辑

这是 df 的文本表示。

                                             kappa
modelName                                         
biasTotal                          count  5.000000
                                   mean   0.526183
                                   std    0.013429
                                   min    0.507536
                                   25%    0.519706
                                   50%    0.525565
                                   75%    0.538931
                                   max    0.539175
biasTotalWithDistanceMetricAccount count  5.000000
                                   mean   0.527275
                                   std    0.014218
                                   min    0.506428
                                   25%    0.520438
                                   50%    0.529771
                                   75%    0.538475
                                   max    0.541262
lightGBMbiasTotal                  count  5.000000
                                   mean   0.531639
                                   std    0.013819
                                   min    0.513363

【问题讨论】:

    标签: python sorting pandas dataframe multi-index


    【解决方案1】:

    你可以这样做:

    数据:

    In [77]: df
    Out[77]:
                            0
    level_1 level_0
    a       25%      2.000000
            50%      4.000000
            75%      7.000000
            count    5.000000
            max      7.000000
            mean     4.400000
            min      2.000000
            std      2.509980
    b       25%      2.000000
            50%      6.000000
            75%      8.000000
            count    5.000000
            max      8.000000
            mean     5.000000
            min      1.000000
            std      3.316625
    c       25%      3.000000
            50%      4.000000
            75%      5.000000
            count    5.000000
            max      8.000000
            mean     4.000000
            min      0.000000
            std      2.915476
    d       25%      4.000000
            50%      8.000000
            75%      8.000000
            count    5.000000
            max      9.000000
            mean     6.000000
            min      1.000000
            std      3.391165
    

    解决方案:

    In [78]: df.loc[pd.IndexSlice[:, ['mean','std']], :]
    Out[78]:
                            0
    level_1 level_0
    a       mean     4.400000
            std      2.509980
    b       mean     5.000000
            std      3.316625
    c       mean     4.000000
            std      2.915476
    d       mean     6.000000
            std      3.391165
    

    设置:

    df = (pd.DataFrame(np.random.randint(0,10,(5,4)),columns=list('abcd'))
            .describe()
            .stack()
            .reset_index()
            .set_index(['level_1','level_0'])
            .sort_index()
    )
    

    【讨论】:

    • 当我将 .sortlevel(1) 添加到您的 df 时,整个 df 都已排序,但我更希望实现的是仅使用均值进行排序
    • @GeorgHeiler,你能以文本形式发布你的 DF(例如print(summary) 的输出),以便我可以复制它吗?
    • @MaU 当然,请查看编辑。正如您所看到的,我的 df 的手段默认情况下不像您的示例中那样排序。我想按平均顺序订购,但要保留“堆叠性”,例如std 对应各自的意思
    • @GeorgHeiler,恐怕您要么必须对索引(所有级别)进行排序,要么使用df.reset_index() 并像使用普通(单级索引)DF 一样工作
    • 我明白了。但重置索引每行产生 2 条记录,例如一个用于平均值,一个用于 std 在名为 level_1 的单独列中如何仅按平均值对该列进行排序,但保持这两行之间的关系,例如具有最大均值,伴随方差,下一个均值和下一个方差,...
    猜你喜欢
    • 2017-08-29
    • 2013-06-19
    • 2017-03-05
    • 2017-06-16
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    相关资源
    最近更新 更多