2017-02-28 6 views
1

sagen, ich habe ein Datenrahmen, der wie folgt aussieht:Pandas groupby Bereich, erlauben Duplikate

char | num 
----------------- 
A  | 1 
B  | 2 
C  | 3 
D  | 4 
E  | 5 

Gibt es eine Möglichkeit, ein groupby Objekt zu machen, die eine Reihe von sagen wir 3 für ‚num‘ verwenden Gruppen zu erstellen wie folgt aus:

Gruppe 1:

char | num 
----------------- 
A  | 1 
B  | 2 
C  | 3 

Gruppe 2:

char | num 
----------------- 
B  | 2 
C  | 3 
D  | 4 

Gruppen:

char | num 
----------------- 
C  | 3 
D  | 4 
E  | 5 

Zeilen würden offensichtlich dupliziert werden, aber dies ist das Ergebnis, das ich werde für. Ich kann mir einige brutale Wege vorstellen, um das zu erreichen, aber ich fange nach einer eleganten Lösung, wenn es da draußen ist.

+2

nicht sicher, aber für das, was Sie beschreiben, sieht aus wie 'pandas.DataFrame.rolling' würde gut sein. Ich weiß zwar nicht, was Sie mit den Gruppen so schwer machen wollen. –

Antwort

2

pd.concat Tricks

n = len(df) - 2 
g = pd.concat([df.iloc[i: i + 3] for i in range(n)]).groupby(np.arange(n).repeat(3)) 

g.get_group(0) 

    char num 
0 A 1 
1 B 2 
2 C 3