对熊猫中的特定列进行排序

时间:2021-01-06 15:00:21

标签: python pandas

我有一个数据框(示例看起来像这样)

Type          SKU      Description   FullDescription        Size      Price
Variable       2        Boots          Shoes on sale       XL,M,S       
Variation      2.5      Boots XL                             XL       330
Variation      2.6      Boots M                              M        330
Variation      2.7      Boots S                              S        330
Variable       3        Boots           Helmet Sizes      E42,E41
Variation      3.8      Helmet E42                          E42       89
Variation      3.2      Helmet E41                          E41       89

我想要做的是根据大小对值进行排序,因此最终的数据框应如下所示:

  Type          SKU      Description   FullDescription        Size      Price
    Variable       2        Boots          Shoes on sale       S,M,XL        
    Variation      2.7      Boots S                             S       330
    Variation      2.6      Boots M                             M        330
    Variation      2.5      Boots XL                            XL        330
    Variable       3        Boots           Helmet Sizes       E41,E42
    Variation      3.2      Helmet E41                          E41       89
    Variation      3.8      Helmet E42                          E42       89

我只能使用 sort_values() 但我似乎找不到任何东西来保留 Type 和 SKU 的顺序。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

有点长

out = df.groupby(df.Type.eq('Variable').cumsum()).\
       apply(lambda x : pd.concat([x.iloc[[0]].assign(Size=lambda y : y['Size'].str.split(',').str[::-1].str.join(',')),
                        x.iloc[1:,].iloc[::-1]]))
Out[458]: 
             Type  SKU Description     Size  Price
Type                                              
1    0   Variable  2.0       Boots   S,M,XL    NaN
     3  Variation  2.7      BootsS        S  330.0
     2  Variation  2.6      BootsM        M  330.0
     1  Variation  2.5     BootsXL       XL  330.0
2    4   Variable  3.0       Boots  E41,E42    NaN
     6  Variation  3.2   HelmetE41      E41   89.0
     5  Variation  3.8   HelmetE42      E42   89.0