2017-09-28 1 views
0

Je voudrais trouver une solution générale pour grouper un DataFrame d'une quantité spécifiée de lignes ou de colonnes. Exemple dataframe:groupby DataFrame par N colonnes ou N lignes

df = pd.DataFrame(0, index=['a', 'b', 'c', 'd', 'e', 'f'], columns=['c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7']) 

    c1 c2 c3 c4 c5 c6 c7 
a 0 0 0 0 0 0 0 
b 0 0 0 0 0 0 0 
c 0 0 0 0 0 0 0 
d 0 0 0 0 0 0 0 
e 0 0 0 0 0 0 0 
f 0 0 0 0 0 0 0 

Par exemple, je voudrais groupe par 2 lignes un temps et d'appliquer une fonction comme moyenne ou similaire. J'aimerais aussi savoir comment grouper par N colonnes et appliquer une fonction.

groupe de 2 lignes un temps prévu de sortie:

c1 c2 c3 c4 c5 c6 c7 
0 0 0 0 0 0 0 0 
1 0 0 0 0 0 0 0 
2 0 0 0 0 0 0 0 

groupe de 2 colonnes un temps de sortie prévue:

0 1 2 3 
a 0 0 0 0 
b 0 0 0 0 
c 0 0 0 0 
d 0 0 0 0 
e 0 0 0 0 
f 0 0 0 0 

Répondre

2

Ce groupe par N lignes

>>> N=2 

>>> df.reset_index(drop=True).groupby(by=lambda x: x/N, axis=0).mean() 
    c1 c2 c3 c4 c5 c6 c7 
0 0 0 0 0 0 0 0 
1 0 0 0 0 0 0 0 
2 0 0 0 0 0 0 0 

Ou cette :

>>> df.groupby(np.arange(len(df.index))//N, axis=0).mean() 
    c1 c2 c3 c4 c5 c6 c7 
0 0 0 0 0 0 0 0 
1 0 0 0 0 0 0 0 
2 0 0 0 0 0 0 0 

Ces groupes de N colonnes

>>> df.groupby(np.arange(len(df.columns))//N, axis=1).mean() 
    0 1 2 3 
a 0 0 0 0 
b 0 0 0 0 
c 0 0 0 0 
d 0 0 0 0 
e 0 0 0 0 
f 0 0 0 0 
+1

après la réinitialisation de colonnes, utilisez '' axis' dans df.groupby (par lambda = x: x/N, axe = 1) .mean() 'pour le groupement de colonnes . – Zero

+1

Luca, j'ai dit réinitialiser les colonnes 'df.columns = range (0, len (df.columns))'? Et puis, appliquez 'df.groupby (par = lambda x: x/N, axe = 1) .mean()'. – Zero

+1

Voir https://stackoverflow.com/questions/36810595/calculate-average-of-every-x-rows-in-a-table-and-create-new-table 'np.arange' serait valide pour les colonnes comme bien (vous le changeriez en 'df.groupby (np.arange (len (df.columns)) // N, axe = 1)' – ayhan