我有一个数据帧,看起来像这样

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'])]})

我想要group-by个id列,并计算列表中的元素,因此所需的输出将如下所示

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],})

推荐答案

利用Pandas 的新功能,我们可以将explodepd.NamedAgg组合在一起,以所需的顺序重新创建您的预期输出:

df.explode('event_list').groupby(['id','event_list']).agg(count=pd.NamedAgg('event_list','count'))

输出:

                count
id  event_list       
T01 a               3
    b               2
    c               2
T02 a               2
    b               1
T03 a               1
    b               2
    c               2

Python相关问答推荐

将两只Pandas rame乘以指数

优化pytorch函数以消除for循环

运输问题分支定界法&

将tdqm与cx.Oracle查询集成

为什么抓取的HTML与浏览器判断的元素不同?

海上重叠直方图

在单次扫描中创建列表

Python Pandas—时间序列—时间戳缺失时间精确在00:00

根据Pandas中带条件的两个列的值创建新列

什么是一种快速而优雅的方式来转换一个包含一串重复的列,而不对同一个值多次运行转换,

一个telegram 机器人应该发送一个测验如何做?""

获取PANDA GROUP BY转换中的组的名称

删除Dataframe中的第一个空白行并重新索引列

按条件计算将记录拆分成两条记录

Groupby并在组内比较单独行上的两个时间戳

为什么这个正则表达式没有捕获最后一次输入?

跨两个数据帧收集非索引列上的公共组

排除NRRD文件中的多切片卷加载问题

给定y的误差时,线性回归系数的计算误差

如何正确设置ALLOWED_HOST以允许网络中的其他计算机访问Web