我设法在我的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
我设法使用以下代码获取数据帧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
我想找到一种方法来获得相同的输出数据帧而不使用循环。
谢谢!
答案 0 :(得分:2)
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