基于列的组合增加列值

2024-10-02 02:42:51 发布

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

我的数据集如下所示:

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

我想根据OwnerIDGroupIDAssignmentID字段中的值填充一个列。如果这些字段中的值跨行相同,那么我希望在新列中重复数字1。但是,如果同一所有者为同一组分配了不同的分配,则新列中的值应该递增。你知道吗

例如-OwnerID1分配了2个赋值(2个具有相同的AssignmentID100,另一个具有AssignmentID200)。在这两种情况下,AssignmentID100都获得值1,因为OwnerIDGroupIDAssignmentID的值相同,但当AssignmentID为200时获得值2。你知道吗

类似地,当OwnerID100分配AssignmentID100、200和300时,这些分配给的组已更改为20。你知道吗

我认为这可以通过以下代码来实现:

AssignmentDetails['colname'] = AssignmentDetails.groupby(['ownerid','groupid','assignmentid']).cumcount()

但这并没有给我要求的结果。当'groupby'子句中的值相同时,它不会重复新列中的值,但会增加值。你知道吗

我如何做到这一点?任何帮助都会很好。你知道吗


Tags: columns数据morecolumn数字needthisgroupby
2条回答

或者

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
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

相关问题 更多 >

    热门问题