Ich habe ein Python Pandas DataFrame, in dem jedes Element ein float oder NaN ist. Für jede Zeile muss ich die Spalte finden, die die n-te Nummer der Zeile enthält. Das heißt, ich brauche die Spalte, die das n-te Element der Zeile enthält, die nicht NaN ist. Ich weiß, dass die n-te Spalte immer existiert.Was ist der schnellste Weg, um für jede Zeile die Spalte zu finden, die das n-te Element enthält, das nicht NaN ist?
Also, wenn n 4 war und ein Pandas Datenrahmen genannt myDF war die folgende:
'A' 60
'B' 70
'C' 100
'D' 40
ich tun konnte:
10 20 30 40 50 60 70 80 90 100
'A' 4.5 5.5 2.5 NaN NaN 2.9 NaN NaN 1.1 1.8
'B' 4.7 4.1 NaN NaN NaN 2.0 1.2 NaN NaN NaN
'C' NaN NaN NaN NaN NaN 1.9 9.2 NaN 4.4 2.1
'D' 1.1 2.2 3.5 3.4 4.5 NaN NaN NaN 1.9 5.5
Ich würde erhalten wollen
import pandas as pd
import math
n = some arbitrary int
for row in myDF.indexes:
num_not_NaN = 0
for c in myDF.columns:
if math.isnan(myDF[c][row]) == False:
num_not_NaN +=1
if num_not_NaN==n:
print row, c
break
Ich bin sicher, das ist sehr langsam und nicht sehr Pythonic. Gibt es einen Ansatz, der schneller ist, wenn es sich um einen sehr großen DataFrame und große Werte von n handelt?
Vielen Dank. Das wird die Dinge für mich sehr beschleunigen. –