添加不带循环的groupby操作中元素编号的列

2024-09-26 17:58:25 发布

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

我设法在pandas数据框中添加了一列,其中包含组的内部编号

这是输入数据帧:

df = pd.DataFrame({
     'name': ['Name1','Name2','Name3','Name4','Name5','Name6', 'Name7', 'Name8'], 
     'group':['GroupB','GroupB','GroupB','GroupA','GroupA','GroupA', 'GroupC', 'GroupC'],
     'revenue':[1,2,3,4,5,6,11,22]}
)

看起来是这样的:

    group   name    revenue
0   GroupB  Name1   1
1   GroupB  Name2   2
2   GroupB  Name3   3
3   GroupA  Name4   4
4   GroupA  Name5   5
5   GroupA  Name6   6
6   GroupC  Name7   11
7   GroupC  Name8   22

我想要这样的输出

    group   name    revenue Group_internal_id
0   GroupA  Name4   4   0
1   GroupA  Name5   5   1
2   GroupA  Name6   6   2
3   GroupB  Name1   1   0
4   GroupB  Name2   2   1
5   GroupB  Name3   3   2
6   GroupC  Name7   11  0
7   GroupC  Name8   22  1

我通过以下代码在dataframe outDF中获得了所需的输出:

numbering_function = lambda x: range(len(x.index))

outDF = pd.DataFrame()
for iK, iDF in df.groupby('group'):
    tempDF = iDF.copy()
    tempDF['Group_internal_id'] = numbering_function(tempDF)
    outDF = outDF.append(tempDF, ignore_index=True)

然后,outDF如下所示:

group   name    revenue Group_internal_id
0   GroupA  Name4   4   0
1   GroupA  Name5   5   1
2   GroupA  Name6   6   2
3   GroupB  Name1   1   0
4   GroupB  Name2   2   1
5   GroupB  Name3   3   2
6   GroupC  Name7   11  0
7   GroupC  Name8   22  1

我想找到一种不使用循环而获得相同输出数据帧的方法

谢谢


Tags: namegroupname1revenuename2name3name4name5
1条回答
网友
1楼 · 发布于 2024-09-26 17:58:25

您需要^{}^{}

df['new'] = df.groupby('group').cumcount()
df = df.sort_values('group')
print (df)
    group   name  revenue  new
3  GroupA  Name4        4    0
4  GroupA  Name5        5    1
5  GroupA  Name6        6    2
0  GroupB  Name1        1    0
1  GroupB  Name2        2    1
2  GroupB  Name3        3    2
6  GroupC  Name7       11    0
7  GroupC  Name8       22    1

相关问题 更多 >

    热门问题