import pandas as pd
import numpy as np
# Generate a random DataFrame
data = {
'Employee ID' : np.random .randint ( 1000 , 9999 , size= 10 ) ,
'Full Name' : [ 'Employee ' + str ( i) for i in range ( 1 , 11 ) ] ,
'Job Title' : np.random .choice ( [ 'Manager' , 'Developer' , 'Analyst' , 'HR' ] , size= 10 ) ,
'Department' : np.random .choice ( [ 'IT' , 'HR' , 'Finance' , 'Marketing' ] , size= 10 ) ,
'Business Unit' : np.random .choice ( [ 'Unit A' , 'Unit B' , 'Unit C' ] , size= 10 ) ,
'Gender' : np.random .choice ( [ 'Male' , 'Female' ] , size= 10 ) ,
'Ethnicity' : np.random .choice ( [ 'Ethnicity 1' , 'Ethnicity 2' , 'Ethnicity 3' ] , size= 10 ) ,
'Age' : np.random .randint ( 20 , 60 , size= 10 ) ,
'Hire Date' : pd.date_range ( '2010-01-01' , periods= 10 , freq= 'Y' ) ,
'Annual Salary' : np.random .randint ( 30000 , 100000 , size= 10 ) ,
'Bonus %' : np.random .uniform ( 5 , 20 , size= 10 ) ,
'Country' : np.random .choice ( [ 'USA' , 'Canada' , 'UK' ] , size= 10 ) ,
'City' : np.random .choice ( [ 'New York' , 'Toronto' , 'London' ] , size= 10 ) ,
'Exit Date' : pd.to_datetime ( np.random .choice ( [ None , '2021-12-31' ] , size= 10 ) )
}
df = pd.DataFrame ( data)
# Query to calculate the median age of employees who left the company
median_age = df[ df[ 'Exit Date' ] .notnull ( ) ] [ 'Age' ] .median ( )
print ( median_age)
print ( df)
aW1wb3J0IHBhbmRhcyBhcyBwZAppbXBvcnQgbnVtcHkgYXMgbnAKCiMgR2VuZXJhdGUgYSByYW5kb20gRGF0YUZyYW1lCmRhdGEgPSB7CiAgICAnRW1wbG95ZWUgSUQnOiBucC5yYW5kb20ucmFuZGludCgxMDAwLCA5OTk5LCBzaXplPTEwKSwKICAgICdGdWxsIE5hbWUnOiBbJ0VtcGxveWVlICcgKyBzdHIoaSkgZm9yIGkgaW4gcmFuZ2UoMSwgMTEpXSwKICAgICdKb2IgVGl0bGUnOiBucC5yYW5kb20uY2hvaWNlKFsnTWFuYWdlcicsICdEZXZlbG9wZXInLCAnQW5hbHlzdCcsICdIUiddLCBzaXplPTEwKSwKICAgICdEZXBhcnRtZW50JzogbnAucmFuZG9tLmNob2ljZShbJ0lUJywgJ0hSJywgJ0ZpbmFuY2UnLCAnTWFya2V0aW5nJ10sIHNpemU9MTApLAogICAgJ0J1c2luZXNzIFVuaXQnOiBucC5yYW5kb20uY2hvaWNlKFsnVW5pdCBBJywgJ1VuaXQgQicsICdVbml0IEMnXSwgc2l6ZT0xMCksCiAgICAnR2VuZGVyJzogbnAucmFuZG9tLmNob2ljZShbJ01hbGUnLCAnRmVtYWxlJ10sIHNpemU9MTApLAogICAgJ0V0aG5pY2l0eSc6IG5wLnJhbmRvbS5jaG9pY2UoWydFdGhuaWNpdHkgMScsICdFdGhuaWNpdHkgMicsICdFdGhuaWNpdHkgMyddLCBzaXplPTEwKSwKICAgICdBZ2UnOiBucC5yYW5kb20ucmFuZGludCgyMCwgNjAsIHNpemU9MTApLAogICAgJ0hpcmUgRGF0ZSc6IHBkLmRhdGVfcmFuZ2UoJzIwMTAtMDEtMDEnLCBwZXJpb2RzPTEwLCBmcmVxPSdZJyksCiAgICAnQW5udWFsIFNhbGFyeSc6IG5wLnJhbmRvbS5yYW5kaW50KDMwMDAwLCAxMDAwMDAsIHNpemU9MTApLAogICAgJ0JvbnVzICUnOiBucC5yYW5kb20udW5pZm9ybSg1LCAyMCwgc2l6ZT0xMCksCiAgICAnQ291bnRyeSc6IG5wLnJhbmRvbS5jaG9pY2UoWydVU0EnLCAnQ2FuYWRhJywgJ1VLJ10sIHNpemU9MTApLAogICAgJ0NpdHknOiBucC5yYW5kb20uY2hvaWNlKFsnTmV3IFlvcmsnLCAnVG9yb250bycsICdMb25kb24nXSwgc2l6ZT0xMCksCiAgICAnRXhpdCBEYXRlJzogcGQudG9fZGF0ZXRpbWUobnAucmFuZG9tLmNob2ljZShbTm9uZSwgJzIwMjEtMTItMzEnXSwgc2l6ZT0xMCkpCn0KCmRmID0gcGQuRGF0YUZyYW1lKGRhdGEpCgojIFF1ZXJ5IHRvIGNhbGN1bGF0ZSB0aGUgbWVkaWFuIGFnZSBvZiBlbXBsb3llZXMgd2hvIGxlZnQgdGhlIGNvbXBhbnkKbWVkaWFuX2FnZSA9IGRmW2RmWydFeGl0IERhdGUnXS5ub3RudWxsKCldWydBZ2UnXS5tZWRpYW4oKQpwcmludChtZWRpYW5fYWdlKQpwcmludChkZikK