代码之家  ›  专栏  ›  技术社区  ›  ByHala

python提供了如何组织类似的组数据

  •  0
  • ByHala  · 技术社区  · 4 年前

    我想组织类似的群体数据。这是我的数据框

      SKU
    FATUT
    GUYGE
    FATUT-01
    SUPAU
    GUYPE
    SUPAU-01 
    FATUT-02
    GUYGE-01 
    

    我预期的数据帧如下所示:

         SKU
       FATUT
    FATUT-01
    FATUT-02
       GUYGE
    GUYGE-01
       SUPAU
    SUPAU-01
       GUYPE
    

    我想按顺序组织类似的数据组。

    1 回复  |  直到 4 年前
        1
  •  2
  •   enke    4 年前

    一种选择是使用 groupby 使用参数 sort=False ; 然后连接拆分的数据帧。

    工作原理:

    • 组 df 在破折号前按绳子
    • 子句 默认情况下,按groupby键进行排序;当我们指定 sort=False ,我们确保密钥的存储顺序与第一次出现在中的顺序相同 df ,即“GUYPE”留在“SUPAU”后面。
    • 子句 对象包含有关组的信息,可以像字典一样解包。然后解包并构建一个生成器表达式,返回分组的数据帧。
    • 使用 concat ,将拆分的数据帧连接成一个;通过使用 ignore_index=True ,我们忽略来自拆分数据帧的索引,并重置索引。
    out = pd.concat((d for _, d in df.groupby(df['SKU'].str.split('-').str[0], sort=False)), ignore_index=True)
    

    输出:

            SKU
    0     FATUT
    1  FATUT-01
    2  FATUT-02
    3     GUYGE
    4  GUYGE-01
    5     SUPAU
    6  SUPAU-01
    7     GUYPE
    

    但我觉得为了你的任务, sort_values 也可以工作,即使顺序与所需输出中的顺序不完全相同:

    df = df.sort_values(by='SKU', ignore_index=True)
    

    输出:

            SKU
    0     FATUT
    1  FATUT-01
    2  FATUT-02
    3     GUYGE
    4  GUYGE-01
    5     GUYPE
    6     SUPAU
    7  SUPAU-01