将groupby与扩展和自定义函数一起使用

2024-09-27 21:24:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由truthIds和trackid组成的数据帧:

truthId = ['A', 'A', 'B', 'B', 'C', 'C', 'A', 'C', 'B', 'A', 'A', 'C', 'C']
trackId = [1, 1, 2, 2, 3, 4, 5, 3, 2, 1, 5, 4, 6]
df1 = pd.DataFrame({'truthId': truthId, 'trackId': trackId})
    trackId truthId
0         1       A
1         1       A
2         2       B
3         2       B
4         3       C
5         4       C
6         5       A
7         3       C
8         2       B
9         1       A
10        5       A
11        4       C
12        6       C

我希望添加一列,计算每个唯一truthId的一组先前(即从数据顶部到该行)与之关联的唯一tracksid的长度:

^{pr2}$

我很快就要完成这个任务了。我可以使用:

df.groupby('truthId').expanding().agg({'trackId': lambda x: len(set(x))})

产生以下输出:

                trackId
truthId            
A       0       1.0
        1       1.0
        6       2.0
        9       2.0
        10      2.0
B       2       1.0
        3       1.0
        8       1.0
C       4       1.0
        5       2.0
        7       2.0
        11      2.0
        12      3.0

这与documentation一致

但是,当我试图将此输出分配给新列时,它会抛出一个错误:

df['unique_Ids'] = df.groupby('truthId').expanding().agg({'trackId': lambda x: len(set(x))})

我以前使用过这个工作流程,理想情况下,新的列会毫无问题地放回原始的日期框中(即拆分-应用-合并)。我怎样才能让它工作?在


Tags: 数据lambdadataframedflenaggpddf1
1条回答
网友
1楼 · 发布于 2024-09-27 21:24:56

你需要reset_index

df['Your']=(df.groupby('truthId').expanding().agg({'trackId': lambda x: len(set(x))})).reset_index(level=0,drop=True)
df
Out[1162]: 
    trackId truthId  Your
0         1       A   1.0
1         1       A   1.0
2         2       B   1.0
3         2       B   1.0
4         3       C   1.0
5         4       C   2.0
6         5       A   2.0
7         3       C   2.0
8         2       B   1.0
9         1       A   2.0
10        5       A   2.0
11        4       C   2.0
12        6       C   3.0

相关问题 更多 >

    热门问题