为每个人选择最高的组/类别 - python

Pick the highest group/category for each person - python

提问人:SAJ 提问时间:6/17/2023 最后编辑:SAJ 更新时间:6/17/2023 访问量:35

问:

我有一个包含三列的数据帧,Name、group1 和 group2。“姓名”列显示不同的人员/案例,“组”列也显示这些人所属的类别。 下面是此数据集的外观图像:

enter image description here

从上面的数据集中可以看出,同一个人可以被分配到多个组,我也需要选择他们所属的最高组。01_high是最高的组,03_low是最低的组。

例如,让我们以第一种情况“汤姆”为例,在第 1 组中,他属于“01_high”,对于第 2 组,“汤姆”属于“03_low”。我需要创建具有更高类别的第三个组列“group3”。在这种情况下,“Tom”的 group3 列中的值将为“01_high”。

用于创建数据集的代码:

data = {'Name': ['Tom', 'Nick','Jack', 'Ann'],
        'group1': ['01_high', '02_medium', '03_low' , '02_medium'],
        'group2':['03_low', '03_low', '02_medium', '03_low']}
  
df = pd.DataFrame(data)
df

最终期望输出:

enter image description here

我对 python 相当陌生,不确定如何实现所需的输出,因此非常感谢任何帮助。谢谢

Python Pandas 数据操作

评论

0赞 oim 6/17/2023
更高的群体是什么意思?这是否意味着数据中的第一个组,或者是否有特定的条件/逻辑来选择成员所属的更高组?如果它只是基于数据中的出现顺序,那么使用drop_duplicates就足够了。
0赞 Timeless 6/17/2023
out = df.groupby("Name", as_index=False, sort=False).first()?
0赞 SAJ 6/17/2023
我问问题的方式有点混乱,所以做了一些编辑,现在应该很清楚了。
1赞 Timeless 6/17/2023
我看到您更新了您的问题,但您忘记使用构造函数这样做。你能仔细检查一下吗?pd.DataFrame
1赞 SAJ 6/17/2023
@Timeless你绝对是对的,我现在已经更新了。非常感谢

答:

-1赞 Александр Ухатов 6/17/2023 #1

你可以使用类似 groupby: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html

评论

0赞 SAJ 6/17/2023
@Timeless提出了同样的建议,但我认为它不适用于我的情况。如果它有效,很高兴被展示:)
0赞 Community 6/18/2023
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。
1赞 Timeless 6/17/2023 #2

这是一个选项:

df["group3"] = df.filter(like="group").apply(sorted, axis=1).str[0]

输出:

print(df)

   Name     group1     group2     group3
0   Tom    01_high     03_low    01_high
1  Nick  02_medium     03_low  02_medium
2  Jack     03_low  02_medium  02_medium
3   Ann  02_medium     03_low  02_medium

评论

1赞 SAJ 6/17/2023
完善!这有效并给了我我所追求的东西。谢谢:)