我有一个如下所示的数据集:
OwnerID GroupID AssignmentID ... <few more columns> [Need this column]
1 10 100 1
1 10 100 1
1 10 200 2
1 20 100 1
1 20 200 2
1 20 300 3
2 30 200 1
2 30 200 1
2 40 300 2
我想根据OwnerID
,GroupID
和AssignmentID
字段中的值填充列。如果这些字段中的值在行之间相同,那么我希望在新列中重复数字1
。但是,如果同一所有者已为同一组分配了不同的分配,则新列中的值应递增。
例如 - OwnerID
1
分配了2个分配(2个具有相同的AssignmentID
100,另一个分配了AssignmentID
200个分配。 AssignmentID
100在两种情况下都会获得值1
,因为OwnerID
,GroupID
和AssignmentID
的值相同,但在AssignmentID
时得到值2 {1}}是200。
同样,当OwnerID
100分配AssignmentID
100,200和300时,分配了这些作业的组已更改为20。
我认为可以使用以下代码完成:
AssignmentDetails['colname'] = AssignmentDetails.groupby(['ownerid','groupid','assignmentid']).cumcount()
但这并没有给我所需的结果。当'groupby'子句中的值相同时,它不会重复新列中的值,但会增加值。
我如何实现这一目标?任何帮助都会很棒。
答案 0 :(得分:2)
df.assign(
result=df.groupby(
['OwnerID', 'GroupID']
).AssignmentID.transform(lambda x: x.factorize()[0]) + 1
)
OwnerID GroupID AssignmentID Result result
0 1 10 100 1 1
1 1 10 100 1 1
2 1 10 200 2 2
3 1 20 100 1 1
4 1 20 200 1 2
5 1 20 300 1 3
6 2 30 200 1 1
7 2 30 200 1 1
8 2 40 300 2 1
答案 1 :(得分:1)
或
df.groupby([ 'OwnerID' , 'GroupID' ]).AssignmentID.transform(lambda x: x.astype('category').cat.codes.add(1))
Out[186]:
0 1
1 1
2 2
3 1
4 2
5 3
6 1
7 1
8 1
Name: AssignmentID, dtype: int8