【问题标题】:Sort values for stacked frame对堆叠框架的值进行排序
【发布时间】:2020-10-26 17:51:21
【问题描述】:

我想从你这边得到一点帮助。 以下问题:我确实有两个大的 excel 文件,我通过 concat 堆叠和合并。生成的文件由两个索引 (MultiIndex) 和两个数值列组成。我计算了两个数值列之间的差异。现在我需要根据差异列对值进行排序,而不改变 0 级索引的顺序,即

ID   Description                                                                 Difference
4533754105 BESCHRIFTUNG - TINTENSTRAHLDRUCK                                             0.000  
           DOSIEREN (1.SEITE)                                                           0.000  
           DOSIEREN (2.SEITE)                                                           0.000  
           EINSETZEN 1. SEITE MIT ROBOTER                                               0.000  
           EINSETZEN 2. SEITE MIT ROBOTER                                               0.000  
           EINSPRÜHEN GIEßSCHALE MIT TRENNMITTEL                                        0.000  
           EINSTREICHEN DICHTUNG MIT SCHMIERMITTEL                                     -0.235  
           ENTFORMEN PATRONE MIT LUFTDÜSE UND PRÜFE                                    -0.140  
           FADENWICKEL MIT MITTELROHR                                                  -0.149  
           FALTEN PAPIER UND ABSCHNEIDEN AUTO.                                          0.000  
           KLEBEN BALG                                                                 -0.159  
           VERPACKEN NACH VERPACKUNGSDATEI                                              0.000  
           ZUSCHNEIDEN FADENÜBERSTAND                                                  -0.056  
1444517S01 1. SEITE - EINSETZEN FILTERTEIL                                             -0.408  
           2. SEITE- NEHMEN FILTERTEIL KOMPL. MIT                                       0.000  
           BESCHRIFTUNG - TINTENSTRAHL                                                  0.000  
           EINRAFFEN BALG UND SICHERN MIT RAFFGUMMI                                    -0.372  
           EINSPRÜHEN GIEßSCHALE MIT TRENNMITTEL                                        0.000  
           ENTFORMEN PATRONE UND PRÜFEN                                                -0.270  
           FALTEN PAPIER UND ABSCHNEIDEN AUTO.                                          0.000  
           KLEBEN BALG                                                                 -0.364  
           VERPACKEN NACH VERPACKUNGSDATEI                                             -0.480  

以上是叠加、合并、计算差值后的原始数据。 ID 和描述在这里是索引。如您所见,差异没有排序

我需要的是对差异列的值进行排序,即

4533754105 EINSTREICHEN DICHTUNG MIT SCHMIERMITTEL                                     -0.235  
           KLEBEN BALG                                                                 -0.159  
           FADENWICKEL MIT MITTELROHR                                                  -0.149  
           ENTFORMEN PATRONE MIT LUFTDÜSE UND PRÜFE                                    -0.140  
           ZUSCHNEIDEN FADENÜBERSTAND                                                  -0.056  
           BESCHRIFTUNG - TINTENSTRAHLDRUCK                                             0.000  
           DOSIEREN (1.SEITE)                                                           0.000  
           DOSIEREN (2.SEITE)                                                           0.000  
           EINSETZEN 1. SEITE MIT ROBOTER                                               0.000  
           EINSETZEN 2. SEITE MIT ROBOTER                                               0.000  
           EINSPRÜHEN GIEßSCHALE MIT TRENNMITTEL                                        0.000  
           FALTEN PAPIER UND ABSCHNEIDEN AUTO.                                          0.000  
           VERPACKEN NACH VERPACKUNGSDATEI                                              0.000  

如果我应用 sort_values 函数,它会弄乱索引,即不同的索引在同一个组中。这是因为排序值,是对整个列的值进行排序,但由于我需要在 ID 组内的同一组内进行排序。

我拆开了框架,但是由于文件的大小,它真的变得很乱。

任何想法

非常感谢您的支持

【问题讨论】:

    标签: pandas sorting stack pivot


    【解决方案1】:

    pandas 0.23+ 可以按列和级别一起排序:

    df = df.sort_values(['ID','Difference'])    
    print (df)
    
                                                         Difference
    ID         Description                                         
    1444517S01 VERPACKEN NACH VERPACKUNGSDATEI               -0.480
               1. SEITE - EINSETZEN FILTERTEIL               -0.408
               EINRAFFEN BALG UND SICHERN MIT RAFFGUMMI      -0.372
               KLEBEN BALG                                   -0.364
               ENTFORMEN PATRONE UND PRÜFEN                  -0.270
               2. SEITE- NEHMEN FILTERTEIL KOMPL. MIT         0.000
               BESCHRIFTUNG - TINTENSTRAHL                    0.000
               EINSPRÜHEN GIEßSCHALE MIT TRENNMITTEL          0.000
               FALTEN PAPIER UND ABSCHNEIDEN AUTO.            0.000
    4533754105 EINSTREICHEN DICHTUNG MIT SCHMIERMITTEL       -0.235
               KLEBEN BALG                                   -0.159
               FADENWICKEL MIT MITTELROHR                    -0.149
               ENTFORMEN PATRONE MIT LUFTDÜSE UND PRÜFE      -0.140
               ZUSCHNEIDEN FADENÜBERSTAND                    -0.056
               BESCHRIFTUNG - TINTENSTRAHLDRUCK               0.000
               DOSIEREN (1.SEITE)                             0.000
               DOSIEREN (2.SEITE)                             0.000
               EINSETZEN 1. SEITE MIT ROBOTER                 0.000
               EINSETZEN 2. SEITE MIT ROBOTER                 0.000
               EINSPRÜHEN GIEßSCHALE MIT TRENNMITTEL          0.000
               FALTEN PAPIER UND ABSCHNEIDEN AUTO.            0.000
               VERPACKEN NACH VERPACKUNGSDATEI                0.000
    

    或者:

    df1 = df.sort_values(['ID','Difference'], ascending=[False, True])    
    print (df1)
                                                         Difference
    ID         Description                                         
    4533754105 EINSTREICHEN DICHTUNG MIT SCHMIERMITTEL       -0.235
               KLEBEN BALG                                   -0.159
               FADENWICKEL MIT MITTELROHR                    -0.149
               ENTFORMEN PATRONE MIT LUFTDÜSE UND PRÜFE      -0.140
               ZUSCHNEIDEN FADENÜBERSTAND                    -0.056
               BESCHRIFTUNG - TINTENSTRAHLDRUCK               0.000
               DOSIEREN (1.SEITE)                             0.000
               DOSIEREN (2.SEITE)                             0.000
               EINSETZEN 1. SEITE MIT ROBOTER                 0.000
               EINSETZEN 2. SEITE MIT ROBOTER                 0.000
               EINSPRÜHEN GIEßSCHALE MIT TRENNMITTEL          0.000
               FALTEN PAPIER UND ABSCHNEIDEN AUTO.            0.000
               VERPACKEN NACH VERPACKUNGSDATEI                0.000
    1444517S01 VERPACKEN NACH VERPACKUNGSDATEI               -0.480
               1. SEITE - EINSETZEN FILTERTEIL               -0.408
               EINRAFFEN BALG UND SICHERN MIT RAFFGUMMI      -0.372
               KLEBEN BALG                                   -0.364
               ENTFORMEN PATRONE UND PRÜFEN                  -0.270
               2. SEITE- NEHMEN FILTERTEIL KOMPL. MIT         0.000
               BESCHRIFTUNG - TINTENSTRAHL                    0.000
               EINSPRÜHEN GIEßSCHALE MIT TRENNMITTEL          0.000
               FALTEN PAPIER UND ABSCHNEIDEN AUTO.            0.000
    

    【讨论】:

    • 不工作,因为“ID”在索引中。如果我采纳你的建议,我会得到“KeyError: ID”。
    • 我的版本是'0.20.1'。好的,让我用更新的版本来做,我会告诉你的:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2011-12-26
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多