Use a.empty, a.bool(), a.item(), a.any() or a.all()

后端 未结 2 994
太阳男子
太阳男子 2020-12-16 21:25
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(50         


        
相关标签:
2条回答
  • 2020-12-16 22:23

    As user2357112 mentioned in the comments, you cannot use chained comparisons here. For elementwise comparison you need to use &. That also requires using parentheses so that & wouldn't take precedence.

    It would go something like this:

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

    In order to avoid that, you can build series for lower and upper limits:

    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)
    

    Now you can slice it as follows:

    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  
    

    And for assignment you can use np.where:

    df['class'] = np.where(mask, 'excellent', 'critical')
    
    0 讨论(0)
  • 2020-12-16 22:27

    solution is easy:

    replace

     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")
    

    by

    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")
    
    0 讨论(0)
提交回复
热议问题