【问题标题】:How to group over lists in pandas dataframe如何对熊猫数据框中的列表进行分组
【发布时间】:2017-10-15 09:44:45
【问题描述】:

我有一个如下所示的数据框:

df = pd.DataFrame({'col1': [['a','b','c'], ['a','d'], ['c','c']]})

我想对数据框进行分组,使其看起来像这样:

result = pd.DataFrame({'col1': [['a'], ['b'], ['c'], ['d']], 'count': [[2],[1],[3],[4]]})

如果我在 python 中使用pd.groupby('col1').count() 选项,我会得到错误

"不可散列的类型:'list'。

如何解决?

【问题讨论】:

    标签: python python-2.7 pandas group-by


    【解决方案1】:

    您需要通过 DataFrame 构造函数展平列表,通过 stack 创建 Series 并最后创建 value_counts

    df1 = pd.DataFrame(df['col1'].values.tolist()).stack().value_counts().reset_index()
    df1.columns = ['col1','count']
    df1 = df1.sort_values('col1')
    print (df1)
      col1  count
    1    a      2
    2    b      1
    0    c      3
    3    d      1
    

    如果真的想要列表(某些 pandas 函数可能会失败)添加 applymap:

    df1 = df1.applymap(lambda x: [x])
    print (df1)
      col1 count
    1  [a]   [2]
    2  [b]   [1]
    0  [c]   [3]
    3  [d]   [1]
    

    Counter + numpy.concatenate 的另一种解决方案:

    from collections import Counter
    
    df1 = pd.Series(Counter(np.concatenate(df['col1']))).reset_index()
    df1.columns = ['col1','count']
    df1 = df1.applymap(lambda x: [x])
    print (df1)
      col1 count
    0  [a]   [2]
    1  [b]   [1]
    2  [c]   [3]
    3  [d]   [1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-20
      • 2022-01-25
      • 2013-07-30
      • 2017-12-13
      • 2021-12-22
      • 2020-06-22
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多