gpt4 book ai didi

python - 如何根据另一个变量的计数创建一个变量,并按某个键分组?

转载 作者:太空宇宙 更新时间:2023-11-03 20:33:24 25 4
gpt4 key购买 nike

我有一个数据集,其中包含标签列和任务 ID 列。每个任务 ID 有 3 行,每行的标签列中都有 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 创建了一个按任务 ID 和标签分组的新表,并带有计数列(['task_id','Label']).agg(['count'])所以它看起来像这样:

- 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 步:从 Excel 工作表创建一个字典,其中列表为键,标签为值

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

第2步:为task:finallabel创建映射器

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

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

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

df_grouped['assigned'] = df_grouped['Label'].apply(assign_label)

关于python - 如何根据另一个变量的计数创建一个变量,并按某个键分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57334055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com