2016-08-08 38 views
-1
df['class'] = np.where(((df['heart rate'] > 50) & (df['heart rate'] < 101)) & ((df['systolic blood pressure'] > 140 & df['systolic blood pressure'] < 160)) & 
    ((df['dyastolic blood pressure'] > 90 & ['dyastolic blood pressure'] < 100)) & ((df['temperature'] > 35 & df['temperature'] < 39)) & 
    ((df['respiratory rate'] >11 & df ['respiratory rate'] <19)) & ((df['pulse oximetry' > 95] & df['pulse oximetry' < 100])), "excellent", "critical") 

Für diesen Code, erhalte ich:Der Wahrheitswert einer Serie ist mehrdeutig

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

+3

Für diesen Code bekomme ich: Übelkeit. –

+0

Wollen Sie ein bitweises '&' anstelle eines Booleschen 'und'? – James

+0

'&' hat Vorrang und Sie haben einige Klammern vergessen. – Julien

Antwort

0

Vielleicht wird dies Ihr (unser) Problem lösen.

import random 
import pandas as pd 
import numpy as np 
heart_rate = [random.randrange(45, 125) for _ in range(500)] 
blood_pressure_systolic = [random.randrange(140, 230) for _ in range(500)] 
blood_pressure_dyastolic = [random.randrange(90, 140) for _ in range(500)] 
temperature = [random.randrange(34, 42) for _ in range(500)] 
respiratory_rate = [random.randrange(8, 35) for _ in range(500)] 
pulse_oximetry = [random.randrange(95, 100) for _ in range(500)] 

vitalsign = { 
    'heart rate' : heart_rate, 
    'systolic blood pressure' : blood_pressure_systolic, 
    'dyastolic blood pressure' : blood_pressure_dyastolic, 
    'temperature' : temperature, 
    'respiratory rate' : respiratory_rate, 
    'pulse oximetry' : pulse_oximetry 
} 

vitalsign_maxima = { 
    'heart rate' : (50,101), 
    'systolic blood pressure' : (140,160), 
    'dyastolic blood pressure' : (90,100), 
    'temperature' : (35,39), 
    'respiratory rate' : (11,19), 
    'pulse oximetry' : (95,100) 
} 

def is_vitalsign_excellent(name): 
    lower, upper = vitalsign_maxima[name] 
    return (lower < df[name]) & (df[name] < upper) 

df = pd.DataFrame(vitalsign) 

f = np.where(is_vitalsign_excellent('heart rate') & 
      is_vitalsign_excellent('systolic blood pressure') & 
      is_vitalsign_excellent('dyastolic blood pressure') & 
      is_vitalsign_excellent('temperature') & 
      is_vitalsign_excellent('respiratory rate') & 
      is_vitalsign_excellent('pulse oximetry'),"excellent", "critical") 

Dieser sollte jetzt funktionieren.

+0

Ich schlage vor, ein 'dict' zu erstellen, das die gleichen Tasten wie das' df' dict hat und jeder Wert ist der ausgezeichnete Min/Max-Wert als Tupel, so dass Sie Ihre Überprüfung für die zukünftige Verwendung erleichtern können. –

+0

Es tut mir leid, es zu sagen nicht –

+0

Import funktioniert zufällig Import Pandas als pd Import numpy als npheart_rate = [random.randrange (45125) für _ in Bereich (500)] blood_pressure_systolic = [random.randrange (140.230) für _ im Bereich (500)] blood_pressure_dyastolic = [random.randrange (90,140) für _ im Bereich (500)] Temperatur = [random.randrange (34,42) für _ im Bereich (500)] respiratory_rate = [random .andrange (8,35) für _ im Bereich (500)] pulse_oximetry = [random.randrange (95,100) für _ im Bereich (500)] –