Для первой задачи, чтобы получить процент столбца 'number_of_donations', вы можете сделать:
df['number_of_donations'].value_counts(normalize=True) * 100
Для второй задачи вам нужно создать новый столбец с категориями, а затем сделать то же:
# Create a Serie with categories
New_Serie = pd.cut(df.number_of_donations,bins=[0,100,200,500,99999999],labels = ['Few','Medium','Many','Too Many'])
# Change the name of the Column
New_Serie.name = Category
# Concat df and New_Serie
df = pd.concat([df, New_Serie], axis=1)
# Get the percentage of the Categories
df['Category'].value_counts(normalize=True) * 100