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
列,则需要通过first
或last
聚合所有列:
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数据框:按一列分组,但由其他列连接和聚合[重复]的主要内容,如果未能解决你的问题,请参考以下文章