pandas - найти количество первых вхождений на пользователя - PullRequest
1 голос
/ 06 мая 2020

У меня есть pandas фрейм данных, как показано ниже:

 userID   value   step
  1        bad     1
  1        bad     2
  1        good    3
  2        good    1
  2        bad     2
  ...
  3000     good    200

пользователь оценивает значение несколько раз. Он может быть плохим или хорошим, и есть номер шага, отслеживающий, сколько раз пользователь набрал очки.

Я хочу найти первый раз на шаге, когда пользователь получает хорошие оценки для каждого пользователя. Например, для пользователя 1 это будет 3, для пользователя 2 это будет 1, et c.

А затем вычислите долю первого шага / общего шага пользователя. Например, для первого пользователя это будет 3/3, для второго пользователя - 1/2.

1 Ответ

0 голосов
/ 06 мая 2020

Идея заключается в замене step значений отсутствующими значениями на Series.where при отсутствии совпадений good по сравнению с Series.eq и создании нового столбца на DataFrame.assign, затем суммируйте по GroupBy.agg с GroupBy.first для первого значения, отличного от NaN, и считает по GroupBy.size, разделите на DataFrame.eval и последнее преобразование Series в Dataframe с помощью Series.reset_index:

df = (df.assign(new = df['step'].where(df['value'].eq('good')))
        .groupby('userID')
        .agg({'new':'first', 'value':'size'})
        .eval('new / value')
        .reset_index(name='score')
        )
print (df)
   userID  score
0       1    1.0
1       2    0.5
2    3000  200.0
...