排序堆叠框架的值

时间:2020-10-26 09:30:04

标签: pandas sorting stack pivot

我想从您身边得到一点帮助。 接下来的问题:我确实有两个很大的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组中的sort_values进行排序。

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

任何想法

非常感谢您的支持

1 个答案:

答案 0 :(得分:2)

可以从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