【问题标题】:Flattening List of Lists Column Following Pandas GroupbyPandas Groupby 之后的列表列扁平化列表
【发布时间】:2021-03-06 18:07:49
【问题描述】:

我有一个 pandas 数据框,其中包含列表类型的 ID 和代码:

df = pd.DataFrame({'ID': [1, 1, 1, 2, 2, 3, 3, 4], 'Code': [['A', 'B'], ['A', 'B'], ['A', 'B', 'C'], 
                   ['A'], ['A'], ['A', 'C'], ['D', 'C'], ['A', 'D']]})

我想按 ID 分组并获取与每个 ID 关联的所有代码的列表:

df_groupby = pd.DataFrame(df.groupby('ID')['Code'].apply(list))

执行上述代码后,我在 ID 级别有一个数据框,其中“代码”列转换为列表列表。如何展平“代码”列中的每个列表列表,以便我拥有与每个 ID 关联的所有代码的列表?

【问题讨论】:

    标签: pandas pandas-groupby flatten


    【解决方案1】:

    试试这个。你可以使用np.hstack水平顺序堆叠数组。

    import numpy as np
    df_groupby["Code"] = df_groupby["Code"].apply(lambda x: np.hstack(x))
    

    df_groupby["Code"] = df_groupby["Code"].apply(np.hstack)
    

    【讨论】:

      【解决方案2】:

      使用列表理解:

      df = df.groupby('ID')['Code'].agg(lambda x: [z for y in x for z in y]).to_frame()
      print(df)
                           Code
      ID                       
      1   [A, B, A, B, A, B, C]
      2                  [A, A]
      3            [A, C, D, C]
      4                  [A, D]
      

      【讨论】:

        【解决方案3】:

        回答我自己的问题。应用 numpy 的 hstack 就可以了:

        df_groupby['Code'] = df_groupby['Code'].apply(np.hstack)
        

        【讨论】:

          猜你喜欢
          • 2016-01-14
          • 2012-07-01
          • 2019-11-29
          • 2017-09-24
          • 2017-02-27
          • 2014-02-23
          • 1970-01-01
          • 2010-12-13
          相关资源
          最近更新 更多