[PYTHON] Pandas: groupby () pour compléter la valeur par groupe

Notes d'étude des pandas.

http://pandas.pydata.org/pandas-docs/stable/groupby.html Pendant que je lisais ici, il était difficile de comprendre l'exemple de la complétion de groupe par valeur, donc j'écrirai un exemple simple.

Préparation.

In [1]: import pandas as pd

In [2]: import numpy as np

In [3]: key = list('ABCABCABC')

In [4]: value = [1,2,3,np.nan,np.nan,np.nan,4,4,4]

In [5]: df = pd.DataFrame({'key': key, 'value': value})

In [6]: df
Out[6]: 
  key  value
0   A    1.0
1   B    2.0
2   C    3.0
3   A    NaN
4   B    NaN
5   C    NaN
6   A    4.0
7   B    4.0
8   C    4.0

Remplir () groupe par groupe

Si vous ffill () sans groupement, les trois NaN seront complétés par value 3.0 avec ʻindex` de 2.

In [7]: df.ffill()
Out[7]: 
  key  value
0   A    1.0
1   B    2.0
2   C    3.0
3   A    3.0
4   B    3.0
5   C    3.0
6   A    4.0
7   B    4.0
8   C    4.0

Si vous groupez par clé puis ffill (), NaN sera complété par la valeur immédiatement avant NaN pour chaque groupe. Par conséquent, «index» vaut 0, 1, 2 («clé» est respectivement A, B, C) et «index» 3, 4, 5 («clé» est A, B, respectivement) C) «valeur» est complétée.

In [8]: df.groupby('key').ffill()
Out[8]: 
  key  value
0   A    1.0
1   B    2.0
2   C    3.0
3   A    1.0
4   B    2.0
5   C    3.0
6   A    4.0
7   B    4.0
8   C    4.0

Prenez la moyenne de chaque groupe et remplissez-la

Où «valeur» est «NaN», prenez la valeur moyenne de chaque groupe et remplissez-la.

In [9]: f = lambda x: x.fillna(x.mean())

In [10]: transformed = df.groupby('key').transform(f)

In [11]: transformed
Out[11]: 
   value
0    1.0
1    2.0
2    3.0
3    2.5
4    3.0
5    3.5
6    4.0
7    4.0
8    4.0

Si vous prenez la moyenne de chaque groupe avant et après le remplissage, vous obtiendrez la même valeur (GroupBy.mean () [Exclude NaN du calcul](http: //pandas.pydata. org / pandas-docs / stable / generated / pandas.core.groupby.GroupBy.mean.html # pandas.core.groupby.GroupBy.mean)).

In [12]: df.groupby('key').mean()
Out[12]: 
     value
key       
A      2.5
B      3.0
C      3.5

In [13]: transformed.groupby(key).mean()
Out[13]: 
   value
A    2.5
B    3.0
C    3.5

Recommended Posts

Pandas: groupby () pour compléter la valeur par groupe
Standardisez par groupe avec les pandas
Comment réparer les multi-colonnes générées par le groupe Pandas en les traitant en single
Manipuler des chaînes avec un groupe pandas par
Génération de fonctionnalités avec pandas group par
Comparaison de vitesse lors du changement de groupe par pandas
Dessinez un graphique en traitant avec Pandas groupby
[pandas] Conseils GroupBy
Pandas de valeur manquante
Trier par pandas
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
Comment extraire des données qui ne manquent pas de valeur nan avec des pandas
Comment utiliser Pandas 2
Convertir 202003 en 2020-03 avec les pandas
Passer par valeur, passer par référence, passer par référence,
[Introduction à Pandas] J'ai essayé d'augmenter les données d'échange par interpolation de données ♬