2016-06-26 3 views
0

Ich habe ein df wie so:Halte längste aufeinanderfolgende Auftreten, die nicht einen bestimmten Wert nicht gleich

Value 
0 
1 
3 
-999 
4 
5 
6 
2 
7 
8 
9 
-999 
3 
2 
-999 
1 

und ich möchte die meisten aufeinanderfolgende Werte in den Datenrahmen halten, die nicht -999

die für in diesem Beispiel würde mir dies:

Value 
4 
5 
6 
2 
7 
8 
9 

ich habe mehrere Datenrahmen (ursprünglich csv-Dateien), die die -999 Werte in verschiedenen locat haben Ionen und ich möchte die gleiche Methode auf alle Datenrahmen anwenden.

+0

Können Sie uns zeigen, was Sie bisher getan haben, um zu versuchen und das Problem zu lösen? – TemporalWolf

+0

Ich habe damit herumgespielt, "df = df.loc [: df [(df ['Running'] == -999)]. Index [0],:]' das würde alles nach dem ersten entfernen "- 999'. Eigentlich möchte ich damit beginnen, zuerst alles nach dem letzten '-999' zu entfernen und dann noch einmal und dann alles vor dem ersten' -999' für dieses Beispiel zu entfernen. Diese Methode wird jedoch nicht bei allen meinen Dateien funktionieren, da es eine andere Anzahl von '-999' gibt. –

+0

Ich bin nicht vertraut mit Pandas Dataframes, aber .. wenn Ihre Daten nicht in einem Puffer (haben alle Werte, wenn Sie den Code ausführen). Sie könnten die Liste mit -999 partitionieren und dann die mit der längsten Länge nehmen? –

Antwort

1

Sie können eine cumsum() für die Bedingungsserie erstellen, die eine eindeutige groupId für jede fortlaufende Sequenz von einer -999 zur anderen gibt. Dann finden Sie die maximale Länge der GroupId und Filter auf das sollte die gewünschte Ausgabe geben:

df['groupId'] = (df['Value'] == -999).cumsum() 
df.Value[df.groupId == df.groupId.value_counts().idxmax()][1:] 

# 4  4 
# 5  5 
# 6  6 
# 7  2 
# 8  7 
# 9  8 
# 10 9 
# Name: Value, dtype: int64 
Verwandte Themen