Lorsque vous souhaitez ajouter des statistiques pour chaque attribut de colonne à une fonctionnalité, il existe de nombreux cas où vous n'avez pas besoin de créer quelque chose comme dict avec des collections ou group by et de les fusionner. C'est facile si vous ne faites que publier des statistiques, mais j'ai eu du mal à utiliser pandas.DataFrame.groupby lorsque je voulais l'ajouter à l'enregistrement en tant que fonctionnalité, je vais donc le laisser comme un mémo.
Ce que je veux dire, c'est que groupby.transform est pratique.
import pandas as pd
df = pd.DataFrame({
"site":["A","A","A","B","B","C"],
"dat":[15,30,30,30,10,50]
})
site | dat | |
---|---|---|
0 | A | 15 |
1 | A | 30 |
2 | A | 30 |
3 | B | 30 |
4 | B | 10 |
5 | C | 50 |
Les fonctionnalités peuvent être générées directement en modifiant l'argument de transformation en np.max ou np.min. Il en va de même pour la médiane, la var, etc. Le code pour calculer la valeur moyenne de chaque site est indiqué ci-dessous.
import numpy as np
df["site_mean"] = df.groupby("site").transform(np.mean)
site | dat | site_mean | |
---|---|---|---|
0 | A | 15 | 25 |
1 | A | 30 | 25 |
2 | A | 30 | 25 |
3 | B | 30 | 20 |
4 | B | 10 | 20 |
5 | C | 50 | 50 |
Count Encoding La méthode permettant de faire du nombre d'occurrences d'entités (de catégorie) d'une certaine colonne une nouvelle caractéristique est appelée encodage de comptage. En combinant avec groupby, il est possible de caractériser quelque chose comme la rareté dans un certain attribut. Vous pouvez le faire avec collections.Counter, mais cela se termine également par une transformation.
Le code à convertir en nombre d'occurrences de la paire site et dat s'affiche. (30 apparitions sur le site A sont 2 fois)
df["count_site_dat"] = df.groupby(["site","dat"]).transform(np.size)
site | dat | site_mean | count_size_dat | |
---|---|---|---|---|
0 | A | 15 | 25 | 1 |
1 | A | 30 | 25 | 2 |
2 | A | 30 | 25 | 2 |
3 | B | 30 | 20 | 1 |
4 | B | 10 | 20 | 1 |
5 | C | 50 | 50 | 1 |
Calculez les plus grandes données d'une certaine caractéristique parmi les données ayant une certaine caractéristique.
df["site_rank"] = df.groupby("site")["dat"].rank(method="dense")
site | dat | site_mean | count_size_dat | site_rank | |
---|---|---|---|---|---|
0 | A | 15 | 25 | 1 | 1 |
1 | A | 30 | 25 | 2 | 2 |
2 | A | 30 | 25 | 2 | 2 |
3 | B | 30 | 20 | 1 | 2 |
4 | B | 10 | 20 | 1 | 1 |
5 | C | 50 | 50 | 1 | 1 |
La modification de l'argument de rang change principalement la méthode d'expression de la même valeur (même rang). Pour plus de détails, reportez-vous à la méthode de classement par rang pandas.DataFrame, Series.
Recommended Posts