【问题标题】:Pandas dataframe: groupby one column, but concatenate and aggregate by others [duplicate]Pandas数据框:按一列分组,但由其他列连接和聚合[重复]
【发布时间】:2023-03-29 03:57:01
【问题描述】:

如何转换以下输入数据(从 Excel 文件提供的 Pandas 数据框):

ID      Category                    Speaker     Price
334014  Real Estate Perspectives    Tom Smith   100
334014  E&E                         Tom Smith   200
334014  Real Estate Perspectives    Janet Brown 100
334014  E&E                         Janet Brown 200

进入这个:

ID      Category                    Speaker                 Price
334014  Real Estate Perspectives    Tom Smith, Janet Brown  100
334014  E&E                         Tom Smith, Janet Brown  200   

所以基本上我想按类别分组,连接扬声器,而不是汇总价格。

我用 Pandas dataframe.groupby().agg() 尝试了不同的方法,但无济于事。也许有更简单的纯 Python 解决方案?

【问题讨论】:

  • @harvpan - 所以你被否决了,嗯嗯....
  • @jezrael,对不起,但我想你应该知道这个问题是否是骗人的。我因回答欺骗而被多次否决。没有什么私人的。
  • 可能是一个骗子,而不是那个问题的骗子。不包括如何获得他想要的价格列。可能必须是一个组合欺骗
  • 嗯,不确定这种情况下的协议是什么。无论如何,我会赞成jezrael的回答。谢谢@user3483203
  • @harvpan 如果你能找到一个先聚合的问题,我会以重复的形式结束。

标签: python pandas


【解决方案1】:

有 2 种可能的解决方案 - 按多列聚合和 join

dataframe.groupby(['ID','Category','Price'])['Speaker'].apply(','.join)

或者只需要聚合Price 列,则需要通过firstlast 聚合所有列:

dataframe.groupby('Price').agg({'Speaker':','.join, 'ID':'first', 'Price':'first'})

【讨论】:

    【解决方案2】:

    试试这个

    df.groupby(['ID','Category'],as_index=False).agg(lambda x : x if x.dtype=='int64' else ', '.join(x))
    

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2022-07-04
      • 2017-02-03
      • 2016-08-13
      • 1970-01-01
      相关资源
      最近更新 更多