Как получить агрегацию трех верхних ящиков в группе панд - процент от баллов больше 7 по 10-балльной шкале? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть следующий Входной кадр данных pandas :

Index respID company    month  score
    0    101     AAA   Oct'18      8
    1    102     AAA   Oct'18     10
    2    103     AAA   Oct'18      5
    3    104     AAA   Oct'18      4
    4    105     BBB   Oct'18      5
    5    106     BBB   Oct'18      6
    6    107     BBB   Oct'18      8
    7    108     BBB   Oct'18      1
    8    109     AAA   Nov'18      5
    9    110     AAA   Nov'18     10
   10    111     AAA   Nov'18      4
   11    112     AAA   Nov'18      7
   12    113     AAA   Nov'18      8
   13    114     BBB   Nov'18      9
   14    115     BBB   Nov'18      2
   15    116     BBB   Nov'18      5
   16    117     BBB   Nov'18      1

Мне нужно объединить большой кадр данных pandas с меткой Top 3 - процент совпадений со счетом 8,9,10по 10-балльной шкале.

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

        Index   TOP3
(AAA, Oct'18)   0.50
(BBB, Oct'18)   0.25
(AAA, Nov'18)   0.40
(BBB, Nov'18)   0.25

Мне сказали, что это очень распространенный показатель в маркетинге., но я не нашел какой-либо близкой агрегации.Я испробовал несколько подходов, например, используя:

AGGR=df.groupby(['month','company'])['score'].apply(lambda x: pd.value_counts(x)/x.count())

, но затем мне нужно было бы выполнить другую агрегацию по сводным оценкам и т. Д.

Есть ли какой-нибудь хороший способ получить агрегацию трех лучших в одном кадре?

Большое спасибо!

1 Ответ

0 голосов
/ 07 декабря 2018

groupby + mean:

d = dict(ratio=df.score >= 8)

df.assign(**d).groupby(['company', 'month'])['ratio'].mean()

company  month
AAA      Nov'18    0.40
         Oct'18    0.50
BBB      Nov'18    0.25
         Oct'18    0.25
Name: ratio, dtype: float64

Чтобы найти верхние 2,3,4, используя ту же логику:

d = dict(
  top2=df.score >= 9,
  top3=df.score >= 8,
  top4=df.score >= 7
)

df.assign(**d).groupby(['company', 'month'])[[*d.keys()]].mean()

                top2  top3  top4
company month
AAA     Nov'18  0.20  0.40  0.60
        Oct'18  0.25  0.50  0.50
BBB     Nov'18  0.25  0.25  0.25
        Oct'18  0.00  0.25  0.25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...