#python #python-3.x #pandas
#python #python-3.x #pandas
Вопрос:
Если у меня есть приведенный ниже код с циклом, который дает мне соотношение потерянных и выигранных типов на основе приведенного ниже, как мне изменить код, если я хочу просмотреть те же данные, но сгруппированные профессором?
leads = ['Passed','Failed']
max_status = None
max_percent = None
for lead in leads:
df_overall = df[(df['Status']== lead) amp; (df['size']== '20-34')]
num_overall = len(df_overall)
lead_df = df[(df['size']== '20-34')]
num_total = len(lead_df)
percentage_overall = num_overall / num_total
if max_status is None:
print(lead, percentage_overall)
Это дает мне результат, как показано ниже:
Passed .65
Failed .35
Я хочу отредактировать код, в котором он разбит на группы по профессорам, поскольку в моем фрейме данных также есть столбец professor.
Ожидаемый результат:
Mr. Johnson Passed .35
Mr. Johnson Failed .65
Ms. Jones Passed .90
Ms. Jones Failed .10
Mr. Boe Passed .80
Mr. Boe Passed .20
Спасибо
Комментарии:
1. Вы
groupby
профессор, а затем применяете свою математику к каждой группе. В онлайновых руководствах есть множество примеров. Где вы застряли? Пожалуйста, опубликуйте свою попытку кодирования.2. можете ли вы поделиться некоторым содержимым из df. Я думаю, вы можете сделать это с помощью более простого groupby
Ответ №1:
Я считаю, что вам нужно GroupBy.size
:
leads = ['Passed','Failed']
lead_df = df[(df['size']== '20-34')]
#filter by list leads
df_overall = lead_df[lead_df['Status'].isin(lead)]
num_overall1 = df_overall.groupby(['professor','Status']).size()
num_total1 = lead_df.groupby(['professor','Status']).size()
out = num_overall1.div(num_total1).reset_index(name='per')
print (out)