2016-06-10 4 views
0

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) 

Antwort

0

Sie haben vergessen, einige return Aussagen

def Fin_adj(row, field): 
    if field == 'Cr': 
     if row[field] <= .7: 
      return Range_eval(row[field],0.,.69,.0,.25) 
     elif row[field] <= .9: 
      return Range_eval(row[field],.7,.89,.25,.5) 
     elif row[field] <= 1.1: 
      return Range_eval(row[field],.9,1.10,.9,.95) 
     elif row[field] <= 1.5: 
      return Range_eval(row[field],1.1,1.49,.95,1) 
     elif row[field] <= 3.: 
      return 1 
     else: 
      return Range_eval(row[field],3.,df[field].max(),.95,1) 

def Range_eval (val_in, Oldmin, Oldmax, Newmin, Newmax): 
    return (((val_in - Oldmin) * (Newmax - Newmin))/(Oldmax - Oldmin)) + Newmin 
+0

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

+0

wir sind hier um zu lernen. Du wirst dich daran erinnern, 'zurück' genug! ;-) –

Verwandte Themen