Ich versuche herauszufinden, warum der von meiner Funktion erzeugte ultimative Wert nicht in der neuen Spalte gespeichert wird, die ich Pandas angewiesen habe. Ich habe bestätigt, dass die if ... elif-Anweisungen korrekt sind und funktionieren, und ich habe bestätigt, dass die Berechnungen stattfinden und die richtigen Daten generieren. Ich bin dieses Ergebnis zu erzielen:Daten werden nicht von verschachtelten Funktionen an Pandas zurückgegeben.
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 1.0
6 NaN
7 1.0
8 1.0
9 NaN
10 NaN
11 NaN
Name: Result, dtype: float64
Aber erwarten
0.036231884058
0.18115942029
0.925
0.9255
0.962820512821
1.0
0.368421052632
1.0
1.0
0.950125944584
1.0
0.950125944584
hier zu bekommen, ist mein Code:
import sys
import numpy as np
import pandas as pd
import scipy.stats
df = pd.DataFrame({
'Cr': [.1,.5,1,1.002,1.2,2,.79,3,3,4,400,4],
'De': [.1,.2,.36,.47,.5,.16,.006,.07,.107,.6,1.7,2.17]
});
def Fin_adj(row, field):
if field == 'Cr':
if row[field] <= .7:
Range_eval(row[field],0,.69,.0,.25)
elif row[field] <= .9:
Range_eval(row[field],.7,.89,.25,.5)
elif row[field] <= 1.1:
Range_eval(row[field],.9,1.10,.9,.95)
elif row[field] <= 1.5:
Range_eval(row[field],1.1,1.49,.95,1)
elif row[field] <= 3:
return 1
else:
Range_eval(row[field],3,data[field].max(),.95,1)
def Range_eval (val_in, Oldmin, Oldmax, Newmin, Newmax):
(((val_in - Oldmin) * (Newmax - Newmin))/(Oldmax - Oldmin)) + Newmin
df['Result'] = df.apply(Fin_adj, args=('Cr',), axis=1)
Wow, danke du Alex. Ich fühle mich wie ein Idiot, den ich hätte schwören können, ich habe es mit und ohne versucht. Ich denke, ich muss bei der Rückkehr in Range_eval ausgeblendet haben, als ich es getestet habe. – Vexiis
wir sind hier um zu lernen. Du wirst dich daran erinnern, 'zurück' genug! ;-) –