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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:27:28