Pandas数据框:按一列分组,但由其他列连接和聚合[重复]

Posted

技术标签:

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

如何转换以下输入数据(从 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 如果你能找到一个先聚合的问题,我会以重复的形式结束。 【参考方案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))

【讨论】:

以上是关于Pandas数据框:按一列分组,但由其他列连接和聚合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何按id python按一列顺序对两列进行分组[重复]

使用完全外连接 oracle 按一列分组

如何按一列分组并对另一列的值进行排序?

新的滚动平均值列,按一列分组并找到另一列的滚动平均值

按一列分组并在熊猫中找到另一列的总和和最大值

我需要连接三个表,将结果按一列分组,并显示另一列的最大值