2017-09-14 16 views
1

Ich habe einige die Suche getan, um diese Frage zu beantworten, aber ich kann nicht herausfinden, wie dies zu tun:die letzte Position jeder Spalte in Datenrahmen von Pandas Finding

Ich habe einen Datensatz, die 185 Zeilen enthält und 30 Spalten. Nicht alle Zeilen haben einen Wert. Ich möchte nach der Position des letzten Werts für jede Spalte suchen und den Index dieser Spalte nehmen. Ich bin nicht sicher, wie diese Operation zu tun, wie wenn ich den Code verwenden, darunter mir die Länge des Datenrahmens nicht nur diese Spalte gibt:

len(data_exam['col']) 

Ich würde für jeden Vorschlag zu schätzen wissen.

Auch möchte ich sicherstellen, dass, wenn ich alle Spalten in einer Schleife lesen möchte, wäre mein folgender Code eine gute Wahl oder nicht! :

list=[] 
for col in data: 
    function which find the length of column 

Danke.

+0

Können Sie erklären, "nicht alle Zeilen Wert". Bedeutet dies, dass alles nach dem Wert leer ist, nach dem Sie suchen? Bitte senden Sie auch Proben/reproduzierbare Daten. –

+0

Also, um klar zu sein, wenn Sie 10 Spalten hätten und die erste Zeile nur Werte für die ersten 5 Spalten hätte Sie den Index der fünften Spalte wollen? –

Antwort

2

können Sie die last_valid_index verwenden um die Indexposition des letzten gültigen Werts in einer bestimmten Spalte zu finden. Es gibt auch Zwilling, first_valid_index.

# Set-up sample data. 
np.random.seed(0) 
df = pd.DataFrame(np.random.randn(5, 3), columns=list('ABC')) 

df.iloc[2:, 0] = np.nan 
df.iloc[4:, 1] = np.nan 
>>> df 
      A   B   C 
0 1.764052 0.400157 0.978738 
1 2.240893 1.867558 -0.977278 
2  NaN -0.151357 -0.103219 
3  NaN 0.144044 1.454274 
4  NaN  NaN 0.443863 

# Solution to find index of last valid values per column. 
>>> df.apply(lambda series: series.last_valid_index()) 
A 1 # <== Index of last valid data in column A. 
B 3 # <== Index of last valid data in column B. 
C 4 # <== Index of last valid data in column C. 
dtype: int64 
2

IIUC, möchten Sie den Wert der letzten nicht-nan in jeder Spalte:

df[::-1].bfill().iloc[0] 

Beispiel:

df = pd.DataFrame({'A':[1,2,3,4,np.nan],'B':[1,np.nan,np.nan,np.nan,np.nan],'C':[1,2,3,4,5]}) 

    A B C 
0 1.0 1.0 1 
1 2.0 NaN 2 
2 3.0 NaN 3 
3 4.0 NaN 4 
4 NaN NaN 5 

Ausgang:

A 4.0 
B 1.0 
C 5.0 
Name: 4, dtype: float64 
+0

OP aufgefordert, Index des letzten Wertes zu finden. _ "Ich möchte nach der Position des letzten Wertes für jede Spalte suchen und den Index dieser Spalte nehmen." _ Sollte wahrscheinlich "Index dieses Wertes" lesen. – Alexander

2
df.reset_index().melt('index').dropna().groupby('variable')['index'].max() 
Out[487]: 
variable 
A 3 
B 0 
C 4 
Name: index, dtype: int64 
+1

Sie sollten 'last()' anstelle von 'max()' verwenden, um für andere Indizes zu verallgemeinern (dies schlägt fehl, wenn der Index beispielsweise umgekehrt wird). Auch die Verwendung von 'Schmelze' verschlechtert die Leistung erheblich. – Alexander

+0

@Alexander ja du hast recht ;-) – Wen

Verwandte Themen