【问题标题】:Group by DataFrame with list and sum使用列表和总和按 DataFrame 分组
【发布时间】:2020-05-13 22:18:36
【问题描述】:

我有一个 pandas 数据框 df,我想按 text 列分组,聚合为:

  • 堆叠english_word并返回列表
  • 对 count 列求和

现在我只能制作english_word 列表或对count 列求和。我尝试这样做,但它返回错误。如何进行这两种聚合?

简单来说,就是我想要的:

文字

吃鸡

english_word

[吃,鸡]

计数

2

df.groupby('text', as_index=False).agg({'count' : lambda x: x.sum(), 'english_word' : lambda x: x.list()})

这是df的例子:

df = pd.DataFrame({'text': ['Saya eat chicken', 'Saya eat chicken'], 
                   'english_word': ['eat', 'chicken'],
                   'count': [1,1]})

【问题讨论】:

标签: python pandas dataframe group-by pandas-groupby


【解决方案1】:

你快到了,你可以做:

s = df.groupby('text').agg({'word': list, 'num': 'count'}).reset_index()

  text       word  num
0  bla  [i, love]    2

样本数据

df = pd.DataFrame({'text':['bla','bla'],
                  'word':['i','love'],
                  'num':[1,2,]})

【讨论】:

    【解决方案2】:

    这样的?

    def summarise(df):
         return Series(dict(Count = df['count'].sum(), 
                            Words = "{%s}" % ', '.join(df['english_word'])))
    
    new_df = df.groupby('text', as_index=False).agg({'count' : lambda x:x.sum(), 'english_word' : lambda x: x.list()})
    
    new_df.groupby('text').apply(summarise)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      相关资源
      最近更新 更多