当前位置: 首页 > 知识库问答 >
问题:

使用a.empty、a.bool()、a.item()、a.any()或a.all()

葛俊
2023-03-14
import random
import pandas as pd

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}


df = pd.DataFrame(vitalsign)


df.to_csv('vitalsign.csv')


mask = (50  < df['heart rate'] < 101 &
        140 < df['systolic blood pressure'] < 160 &
        90  < df['dyastolic blood pressure'] < 100 &
        35  < df['temperature'] < 39 &
        11  < df['respiratory rate'] < 19 &
        95  < df['pulse oximetry'] < 100
        , "excellent", "critical")

df.loc[mask, "class"]

.我该怎么解决

共有1个答案

祝英博
2023-03-14

正如注释中提到的user2357112,这里不能使用链接比较。要进行元素比较,需要使用&。这还需要使用括号,这样&就不会优先。

事情会是这样的:

mask = ((50  < df['heart rate']) & (101 > df['heart rate']) & (140 < df['systolic...

为了避免这种情况,您可以为下限和上限构建系列:

low_limit = pd.Series([90, 50, 95, 11, 140, 35], index=df.columns)
high_limit = pd.Series([160, 101, 100, 19, 160, 39], index=df.columns)
mask = ((df < high_limit) & (df > low_limit)).all(axis=1)
df[mask]
Out: 
     dyastolic blood pressure  heart rate  pulse oximetry  respiratory rate  \
17                        136          62              97                15   
69                        110          85              96                18   
72                        105          85              97                16   
161                       126          57              99                16   
286                       127          84              99                12   
435                        92          67              96                13   
499                       110          66              97                15   

     systolic blood pressure  temperature  
17                       141           37  
69                       155           38  
72                       154           36  
161                      153           36  
286                      156           37  
435                      155           36  
499                      149           36  
df['class'] = np.where(mask, 'excellent', 'critical')
 类似资料: