Немного другое решение, также итерирующее по GroupBy
:
df = pd.DataFrame(
data = [
['Tom', 'Monday', 5],
['John', 'Monday', 2],
['Tom', 'Tuesday', 3],
['John', 'Tuesday', 4]
],
columns=['Employee', 'Day', 'Hours_Worked']
)
result = {
employee: {row["Day"]: row["Hours_Worked"] for _, row in employee_data.iterrows()}
for employee, employee_data in df.groupby("Employee")
}