import pandas as pd def process_data(activity, heartrate, weight): heartrate['Time'] = pd.to_datetime(heartrate['Time']) heartrate['date'] = heartrate['Time'].dt.date avg_heartrate = heartrate.groupby(['Id', 'date'])['Value'].mean().reset_index() avg_heartrate = avg_heartrate.groupby('Id')['Value'].mean().reset_index() avg_heartrate.columns = ['Id', 'avg_heartrate'] avg_calories = activity.groupby('Id')['Calories'].mean().reset_index() avg_calories.columns = ['Id', 'avg_calories'] avg_bmi = weight.groupby('Id')['BMI'].mean().reset_index() avg_bmi.columns = ['Id', 'avg_bmi'] user_metrics = pd.merge(avg_heartrate, avg_calories, on='Id', how='outer') user_metrics = pd.merge(user_metrics, avg_bmi, on='Id', how='outer') def classify_user(row): if row['avg_heartrate'] > 100 or row['avg_heartrate'] < 60 or row['avg_bmi'] > 30 or row['avg_bmi'] < 18.5 or row['avg_calories'] < 1600: return 'High Risk' elif 90 < row['avg_heartrate'] <= 100 or 60 <= row['avg_heartrate'] < 70 or 25 < row['avg_bmi'] <= 30 or 1600 <= row['avg_calories'] < 2000: return 'Medium Risk' else: return 'Low Risk' user_metrics['Risk Category'] = user_metrics.apply(classify_user, axis=1) return user_metrics