我有一个数据集,其中包含一个标签列和一个任务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
我该如何最好地做到这一点?我被卡住了!
答案 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