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

标签 python pandas dataframe machine-learning

我有以下示例数据框

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/

相关文章:

python - 检查一个字符串在python中是否只有白色字符

python - 尝试更新数据框时出现 Pandas Reduction 错误

python - 通过 3D x、y、z 散点图数据拟合一条线

python - Pandas 索引列标题或名称

r - 如果该行包含任何 "TRUE",则保留该行

python - 如何计算数据框列中的出现次数?

python - python print() 函数实际上做了什么?

python - 如何替换大海捞针第N次出现的情况? (Python)

python - tryton中这个函数有什么用?

python - 如何加快包含 sql 查询的代码?