считать и подсчитывать в панде - PullRequest
0 голосов
/ 24 мая 2018

У меня есть DF, который выглядит следующим образом:

trainee | course | completed | days overdue
Ava       ABC      Yes         0
Bob       ABC      Yes         1
Charlie   DEF      No          10
David     DEF      Yes         0
Emily     DEF      Yes         0
Finn      GHI      Yes         0

Мне нужно создать DF, который сообщает мне, сколько курсов было пройдено, сколько было пройдено за время (то есть с 0 просроченными днями),и каков процент полноты.

Т.е. результат должен выглядеть так:

course | count | in time | % completed in time
ABC      2       1         0.5
DEF      3       2         0.66
GHI      1       1         1

Как мне это сделать с Пандами?

Спасибо!

FP

ps вот код для генерации входного DF:

df = pd.DataFrame({'Trainee': ['Ava','Bob','Charlie','David','Emily','Finn'],'Course':['ABC','ABC','DEF','DEF','DEF','GHI'],'Completed': ['Yes','Yes','No','Yes','Yes','Yes'],'Days overdue':[0,1,10,0,0,0]})

1 Ответ

0 голосов
/ 24 мая 2018

Используйте agg для общего количества и количества 0 с для групп, последние столбцы деления на div:

tups = [('count', 'size'), ('in time', lambda x: (x==0).sum())]
df = df.groupby('course')['days overdue'].agg(tups).reset_index()

df['% completed in time'] = df['in time'].div(df['count'])
print (df)
  course  count  in time  % completed in time
0    ABC      2        1             0.500000
1    DEF      3        2             0.666667
2    GHI      1        1             1.000000
...