You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用groupby等方法在DataFrame中取最大计数并拼接对应文本

解决DataFrame按日期分组取value计数最大值并拼接fruit的问题

需求说明:
对DataFrame按date字段分组,统计每日内相同value的出现次数,获取每组中计数最大的记录,并拼接对应的fruit文本。

示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'date': ['2020-09-10','2020-09-10','2020-09-10','2020-09-10','2020-09-08','2020-09-08'],
    'fruit':['apple','banana','apple','oragne','apple','orange'], 
    'value':['1','1','2','3','3','3']
})

方法一:基于已有中间结果合并

你已经完成了两个关键操作,只需将它们合并即可得到最终结果:

  1. 获取每日各value的最大计数记录:
x = df.groupby('date')['value'].value_counts().rename('count').reset_index().drop_duplicates('date')

输出:

date value  count
0  2020-09-08     3      2
1  2020-09-10     1      2
  1. 按date和value分组拼接fruit文本,转为DataFrame方便后续合并:
fruit_agg = df.groupby(['date', 'value'])['fruit'].apply(' '.join).reset_index(name='fruit')

输出:

date value          fruit
0  2020-09-08     3  apple orange
1  2020-09-10     1  apple banana
2  2020-09-10     2          apple
3  2020-09-10     3         oragne
  1. 合并两个结果:
final_df = x.merge(fruit_agg, on=['date', 'value'], how='left')

最终输出:

date value  count          fruit
0  2020-09-08     3      2  apple orange
1  2020-09-10     1      2  apple banana

方法二:一步到位的聚合+筛选

直接通过一次分组聚合,再筛选出每个日期的最大计数记录,步骤更简洁:

# 按date和value分组,同时统计数量和拼接fruit
agg_result = df.groupby(['date', 'value']).agg(
    count=('value', 'size'),
    fruit=('fruit', ' '.join)
).reset_index()

# 按count降序排序后,保留每个date的第一条记录(即计数最大的),最后按date排序
final_df = agg_result.sort_values('count', ascending=False).drop_duplicates('date').sort_values('date').reset_index(drop=True)

执行后同样得到期望的最终输出。

内容的提问来源于stack exchange,提问作者ah yuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:12:37