如何根据另一个变量的计数(按特定键分组)创建变量?

时间:2019-08-02 22:24:55

标签: python pandas

我有一个数据集,其中包含一个标签列和一个任务ID列。每个任务ID有3行,每个行在label列中都有一些L1-L5值。我需要根据任务的这些标签的特定组合为每个任务分配一个最终标签。看起来像这样:

- TaskID Label
- Task1     L1      
- Task1     L2      
- Task1     L5      
- Task2     L2      
- Task2     L2      
- Task2     L4      
- Task3     L1 
- Task3     L1 
- Task3     L1 

我对python还是很陌生,并且坚持如何编写代码-到目前为止,我已经使用lCounts = df.groupby(['task_id','Label']).agg(['count'])创建了一个新表,该表按任务ID和标签以及带有计数列的分组 所以看起来像这样:

- TaskID   Label  Count
- Task1     L1      1
- Task1     L2      1
- Task1     L5      1
- Task2     L2      2
- Task2     L4      1
- Task3     L1      3

,依此类推,但不确定是否有帮助。最终,我需要一个名为finalLabel的变量,该变量取决于每个任务的每个标签的计数(例如,如果一个任务有2个L2和1个L4,则最终标签为A,如果它具有3个L3的最终标签为B, (如果它具有1个L1、1个L2和1个L3,则最终标签为C,依此类推)。我在excel中有一张图表,将每个标签组合映射到最终标签。

输出类似于

- TaskID   FinalLabel 
- Task1     A        
- Task2     B      
- Task3     C      

我该如何最好地做到这一点?我被卡住了!

1 个答案:

答案 0 :(得分:0)

第1步:从excel工作表中创建一个字典,列表作为键,标签作为值

s = s[:-N] + N*'-'

第2步:为任务:finallabel创建映射器

 d = {('L1', 'L3', 'L4'): A, ('L2', 'L2','L3'): B}

步骤3:将最终列表映射到每个任务,然后映射到字典

df_grouped = df.groupby('TaskID')['Label'].apply(tuple).to_frame()

希望这会有所帮助。

编辑: 您可以根据示例中的元素数编写如下的assign函数。

df_grouped['FinalLabel'] = df_grouped['Label'].map(d)

def assign_label(label):
    if len(label) == len(set(label)): # 3 different elements in label
        return 'A'
    elif len(label) - len(set(label)) == 1: # 2 differnet elements in label
        return 'B'
    else:
        return 'C' #all the same elements in label