In [26]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
In [27]:
df = pd.read_csv(r'C:\Users\cscully\Downloads\Smith vs Jones Patient Types (1).csv')
print(df)
    Strata  Previous MI  CHF  Shock    Prob  LOS Clinician
0        1            1    1      0  0.0375  4.5     Smith
1        2            1    0      1  0.1488  5.0     Smith
2        3            1    0      0  0.0638  4.0     Smith
3        4            0    1      1  0.2363  3.0     Smith
4        5            0    1      0  0.2888  5.0     Smith
5        6            0    0      1  0.0563  3.0     Smith
6        7            0    0      0  0.1688  4.0     Smith
7        8            1    1      1  0.1658  7.0     Jones
8        9            1    1      0  0.3777  5.0     Jones
9       10            1    0      1  0.0893  4.0     Jones
10      11            1    0      0  0.2083  3.0     Jones
11      12            0    1      1  0.0473  4.0     Jones
12      13            0    1      0  0.0578  5.0     Jones
13      14            0    0      1  0.0293  3.0     Jones
14      15            0    0      0  0.0158  2.0     Jones
In [28]:
#change data types to float
df.dtypes
Out[28]:
Strata           int64
Previous MI      int64
CHF              int64
Shock            int64
Prob           float64
LOS            float64
Clinician       object
dtype: object
In [29]:
df['Strata'] = df['Strata'].astype(float)
df['Previous MI']=df['Previous MI'].astype(float)
df['CHF']=df['CHF'].astype(float)
df['Shock']=df['Shock'].astype(float)
In [30]:
df.dtypes
Out[30]:
Strata         float64
Previous MI    float64
CHF            float64
Shock          float64
Prob           float64
LOS            float64
Clinician       object
dtype: object
In [34]:
#Calculate Pattern for Dr Smith and Dr Jones=
expectedOutcome={}
diagnoses={}
for md in ['Smith','Jones']:
    #print("Clinician",md)
    df1=df[df['Clinician'] == md]
    #diagnoses[md]=""
    #print(df1['diagnosesStrg'])
    #print("df1",df1,df1['LOS'].max())
    groupDF = df1.groupby(['Previous MI','CHF','Shock'],as_index=False)
    total = 0
    for name, group in groupDF:
        #print("name",name,"group",group)

        tmpDF=pd.DataFrame()
        tmpDF=pd.DataFrame(group).reset_index()
        maxprob = tmpDF['Prob'].max()
        maxlos = tmpDF['LOS'].max()
        diagnoses[md,name]=maxlos
        val = maxprob*maxlos
        #print ("maxprob",maxprob,"maxlos",maxlos,"val",val)
        total=total+val
    #print("total",total)
    expectedOutcome[md]=total
    #print("diagnoses",diagnoses)
    #print(expectedOutcome)
for item in expectedOutcome:
    print(item,"expected LOS: ",expectedOutcome[item])
Smith expected LOS:  4.16495
Jones expected LOS:  4.6289
In [32]:
#Match Clinician and Peer on Common Strata
mdDict={'Jones':'Smith','Smith':'Jones'}
expectedOutcomeNew={}
total=0
for md in ['Smith','Jones']:
    #print("Clinician",md)
    df1=df[df['Clinician'] == md]
    groupDF = df1.groupby(['Previous MI','CHF','Shock'],as_index=False)
    total = 0
    for name, group in groupDF:
        #print("name",name,"group",group)
        tmpDF=pd.DataFrame()
        tmpDF=pd.DataFrame(group).reset_index()
        maxprob = tmpDF['Prob'].max()
          #if ','.join([mdDict[md],name]) in diagnoses:
    
        try:
            maxlos = diagnoses[mdDict[md],name]
            #print("found",mdDict[md],"in diagnoses dictionary")
        except:
            maxlos = expectedOutcome[md]
            #print("did not find")
        val = maxprob*maxlos
        #print ("maxprob",maxprob,"maxlos",maxlos,"val",val)
        total=total+val
    #print("total",total)
    expectedOutcomeNew[mdDict[md]]=total
print("Expected LOS outcomes for MDs taking care of each others patients: ")
for item in expectedOutcomeNew:
    print(item,"expected LOS when taking care of",mdDict[item],
          "patients:",expectedOutcomeNew[item])
Expected LOS outcomes for MDs taking care of each others patients: 
Jones expected LOS when taking care of Smith patients: 3.8697999999999997
Smith expected LOS when taking care of Jones patients: 4.32882162
In [ ]: