首页 > 解决方案 > 在同一数据框中递归使用 set 函数

问题描述

我有一个如下所示的数据框:

id     events 
1        [a]
1        [a,b,c,d]
2        [d,e]
2        [d,e,f]

我想消除后续行中的常见项目..导致:

id     events 
1        [a]
1        [b,c,d] 
2        [d,e]
2        [f]

我知道 set 函数在列级别执行此操作,但是否可以使用 apply 或 lambda 函数在行上递归执行此操作?

标签: pythonpython-3.xpandasdataframe

解决方案


一个想法是使用DataFrame.explode,删除两列的重复项,DataFrame.drop_duplicates然后聚合回来:

df = (df.explode('events')
        .drop_duplicates(['id','events'])
        .groupby(level=0)
        .agg({'id':'first', 'events':list}))
print (df)
   id     events
0   1        [a]
1   1  [b, c, d]
2   2     [d, e]
3   2        [f]

推荐阅读