Python >> Tutoriel Python >  >> Python Tag >> Pandas

Comment changer uniquement la valeur maximale d'un groupe dans la trame de données pandas

Utilisez idxmax :

idx = df.groupby("Item")["Count"].idxmax()
df["New_Count"] = df["Count"]
df.loc[idx, "New_Count"] += 1

Cela n'incrémentera que la première occurrence du maximum dans chaque groupe. Si vous souhaitez incrémenter toutes les valeurs maximales en cas d'égalité, vous pouvez utiliser transform Au lieu. Remplacez simplement la première ligne ci-dessus par :

idx = df.groupby("Item")["Count"].transform(max) == df["Count"]

Vous pouvez utiliser idxmax() pour obtenir l'idx du maximum pour chaque groupe, et incrémenter uniquement ces éléments, comme ceci :

max_idxs = df.groupby(['Item'])['Count'].idxmax()
df['New_Count']=df['Count'] # copy entire column
df['New_Count'][max_idxs]+=1 # increment only the maximum item for each group by 1

Voici une autre façon de ne pas utiliser groupby mais d'utiliser duplicated

df.loc[~df.sort_values('Count', ascending=False).duplicated('Item'), 'Count'] += 1

Sortie :

  Item  Count
0    A     61
1    A     20
2    A     21
3    B     34
4    B     33
5    B     32