gpt4 book ai didi

python - 如何根据pandas中的组最大值将一列的标签分配给新一列

转载 作者:行者123 更新时间:2023-11-30 09:26:36 26 4
gpt4 key购买 nike

我有以下示例数据框

df = pd.DataFrame(columns=['Id_hour', 'Id', 'hour', 'label'])

df['Id_hour'] = ['A_1','A_2','A_3','A_4','B_1','B_2','B_3','B_4','C_1','C_2','C_3','C_4']

df['Id'] = ['A','A', 'A', 'A', 'B', 'B', 'B', 'B','C', 'C', 'C', 'C']
df['hour'] = ['1','2', '3', '4', '1', '2', '3','4','1', '2', '3','4']
df['label'] = ['H','L', 'L', 'L', 'H', 'H', 'H', 'L','H', 'H', 'L', 'L']

我想获取每个 Id 标签列出现的最大数量。然后将该标签(出现次数最多)分配给该特定 ID 的所有原始数据,并在名为 assigned_label 的新列名称中进行分配。如果没有单个局部最大值(例如,如果每个 Id 均等地出现一个标签),我想为 assigned_label 列的该 Id 的所有行分配一个新标签“R”。输出结果应如下所示

df['assigned_label'] = ['L', 'L', 'L', 'L', 'H', 'H', 'H','H','R','R', 'R', 'R']

enter image description here

最佳答案

你可以试试这个:

df['assigned_label'] = df.groupby('Id')['label']\
.transform(lambda x: x.mode()[0] if len(x.mode()) == 1 else 'R')

输出:

   Id_hour Id hour label assigned_label
0 A_1 A 1 H L
1 A_2 A 2 L L
2 A_3 A 3 L L
3 A_4 A 4 L L
4 B_1 B 1 H H
5 B_2 B 2 H H
6 B_3 B 3 H H
7 B_4 B 4 L H
8 C_1 C 1 H R
9 C_2 C 2 H R
10 C_3 C 3 L R
11 C_4 C 4 L R

关于python - 如何根据pandas中的组最大值将一列的标签分配给新一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57285108/

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