Firstly I would create the columns you wish to aggregate populated with zeros and ones, and then use groupby and do a simple sum of the values...
I didnt get to try this out, but I think the following should work:
Present = ['A_Pre', 'B_Pre', 'C_Pre' ]
Absent = ['A_Abs', 'B_Abs', 'C_Abs' ]
for string in Present:
DF[string] = pd.Series([1 if stat == 'Present' and sect == string[0] else 0
for stat, sect in zip(DF['Status'], DF['Section'])],
index = DF.index)
for string in Absent:
DF[string] = pd.Series([1 if stat == 'Absent' and sect == string[0] else 0
for stat, sect in zip(DF['Status'], DF['Section'])],
index = DF.index)
DF.groupby(['Date', 'type']).agg(sum)