提问人:SAJ 提问时间:6/17/2023 最后编辑:SAJ 更新时间:6/17/2023 访问量:35
为每个人选择最高的组/类别 - python
Pick the highest group/category for each person - python
问:
我有一个包含三列的数据帧,Name、group1 和 group2。“姓名”列显示不同的人员/案例,“组”列也显示这些人所属的类别。 下面是此数据集的外观图像:
从上面的数据集中可以看出,同一个人可以被分配到多个组,我也需要选择他们所属的最高组。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
最终期望输出:
我对 python 相当陌生,不确定如何实现所需的输出,因此非常感谢任何帮助。谢谢
答:
-1赞
Александр Ухатов
6/17/2023
#1
你可以使用类似 groupby: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html
评论
0赞
SAJ
6/17/2023
@Timeless提出了同样的建议,但我认为它不适用于我的情况。如果它有效,很高兴被展示:)
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
完善!这有效并给了我我所追求的东西。谢谢:)
评论
out = df.groupby("Name", as_index=False, sort=False).first()
?pd.DataFrame