2017-07-25 5 views
4

Ich bin neu in Pandas und ich würde gerne wissen, wie man Daten durch Extrahieren nur Teile von Zeilen zu reinigen. Sagen i einen Datenrahmen aufweist, wie folgt:Pandas Datenrahmen selektive Daten Reinigung post groupby

column1  date key 
A   2016 SB 
A   2017 B 
B   2015 SB 
C   2014 SB 
C   2014 PB 
C   2015 B 
C   2016 SB 

Wie reinige ich die Daten, so dass für jedes von dem gleichen column1 Wert, i nur den ersten beiden Reihen Wert extrahieren und den Rest ignorieren (beispielsweise auf C-Wert, nur 2014 SB und 2014 PB ist, was ich bekomme)?

column1  date key 
A   2016 SB 
A   2017 B 
B   2015 SB 
C   2014 SB 
C   2014 PB 

Danke

Antwort

7

Sie GroupBy.head brauchen, schauen Sie auch docs:

df = df.groupby('column1').head(2) 
print (df) 
    column1 date key 
0  A 2016 SB 
1  A 2017 B 
2  B 2015 SB 
3  C 2014 SB 
4  C 2014 PB 
+3

es ist schwierig, diese eine nach oben ...;) – MaxU

4
In [82]: df.loc[df.groupby('column1').cumcount().lt(2)] 
Out[82]: 
    column1 date key 
0  A 2016 SB 
1  A 2017 B 
2  B 2015 SB 
3  C 2014 SB 
4  C 2014 PB 
4

Aus Frustration mit, wie wahr @ MAXU Aussage ist ... kam ich mit diesem lächerlichen oben Lösung.

df.groupby('column1').head(2) 

es ist schwierig, diese eine nach oben ...;) - MAXU

df.drop_duplicates('column1').append(
    df[df.duplicated('column1')].drop_duplicates('column1') 
) 

    column1 date key 
0  A 2016 SB 
2  B 2015 SB 
3  C 2014 SB 
1  A 2017 B 
4  C 2014 PB 
+1

interessante Lösung! :) – MaxU