Pandas DataFrame按ID分组统计次数并将name列值转为集合的方法
实现方案
你可以直接使用groupby的agg聚合方法同时完成两个统计需求,代码如下:
import pandas as pd # 原始DataFrame示例 data = pd.DataFrame({ 'ID': [23,42,23,42,42], 'name': ['aaa','bbb','aab','bbb','bbb'] }) # 核心实现代码 result = data.groupby('ID', as_index=False).agg( count=('ID', 'size'), name=('name', set) ).sort_values('count', ascending=False, ignore_index=True) print(result)
运行后输出完全符合预期:
count ID name 0 3 42 {bbb} 1 2 23 {aaa, aab}
代码说明
- 聚合参数
count=('ID', 'size')表示统计每个ID分组的行数,即ID的出现次数 - 聚合参数
name=('name', set)表示将每个分组内的name值去重后转为集合存储 - 末尾的
sort_values方法是按照count列降序排序,如果你不需要排序可以直接删除这部分逻辑
如果你使用的pandas版本较低不支持上述命名聚合语法,可以用分步骤实现的写法:
grouped = data.groupby('ID') # 先处理name列转集合 result = grouped['name'].apply(set).reset_index(name='name') # 再新增count计数列 result['count'] = grouped.size().values # 按count降序排序 result = result.sort_values('count', ascending=False, ignore_index=True)
内容的提问来源于stack exchange,提问作者bfalk
相关产品推荐
相关产品推荐

