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
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
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