如何在DataFrame中按id分组统计列表内元素的出现次数
问题与解决方案
原始数据
用户提供的DataFrame如下:
import pandas as pd df = pd.DataFrame({'id': ['T01', 'T01', 'T01', 'T02', 'T02', 'T03', 'T03'], 'event_list': [(['a', 'b']), (['a', 'c']), (['a', 'b', 'c']), (['a']), (['a','b']), (['a', 'b', 'c']), (['b', 'c'])]})
需求
按id列分组,统计每个event在对应id的所有event_list列表中的出现次数,输出格式如下:
result_df = pd.DataFrame({'id': ['T01','T01','T01','T02','T02', 'T03', 'T03','T03'], 'event': ['a','b','c','a','b','a','b','c'], 'count': [3,2,2,2,1,1,2,2],})
实现代码
可以通过展开列表+分组计数的方式快速实现:
# 展开event_list列,将每个列表元素拆分为单独行 exploded_df = df.explode('event_list') # 按id和event_list分组,统计出现次数,重置索引并重命名列 result_df = exploded_df.groupby(['id', 'event_list']).size().reset_index(name='count').rename(columns={'event_list': 'event'})
代码说明
df.explode('event_list'):将event_list列中的每个列表元素拆分成独立行,保留对应的id值;groupby(['id', 'event_list']).size():按id和拆分后的事件元素分组,统计每组的行数(即事件出现次数);reset_index(name='count'):将分组后的索引转为列,并把计数列命名为count;rename(columns={'event_list': 'event'}):把列名event_list改为需求中的event。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

