【问题标题】:Pandas groupby on a column of lists在一列列表上的 Pandas groupby
【发布时间】:2018-09-01 05:57:19
【问题描述】:

我有一个 pandas 数据框,其中有一列包含 lists

df = pd.DataFrame({'List': [['once', 'upon'], ['once', 'upon'], ['a', 'time'], ['there', 'was'], ['a', 'time']], 'Count': [2, 3, 4, 1, 2]})

Count   List
2    [once, upon]
3    [once, upon]
4    [a, time]
1    [there, was]
2    [a, time]

如何合并List 列并对Count 列求和?预期结果是:

Count   List
5     [once, upon]
6     [a, time]
1     [there, was]

我试过了:

df.groupby('List')['Count'].sum()

导致:

TypeError: unhashable type: 'list'

【问题讨论】:

    标签: python python-3.x pandas pandas-groupby


    【解决方案1】:

    一种方法是先转换为元组。这是因为pandas.groupby 要求键是可散列的。元组是不可变和可散列的,但列表不是。

    res = df.groupby(df['List'].map(tuple))['Count'].sum()
    

    结果:

    List
    (a, time)       6
    (once, upon)    5
    (there, was)    1
    Name: Count, dtype: int64
    

    如果您需要将结果作为数据框中的列表,您可以转换回来:

    res = df.groupby(df['List'].map(tuple))['Count'].sum()
    res['List'] = res['List'].map(list)
    
    #            List  Count
    # 0     [a, time]      6
    # 1  [once, upon]      5
    # 2  [there, was]      1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 2018-03-29
      • 2020-03-17
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      相关资源
      最近更新 更多