Выборка после группового на каждой группе в питоне - PullRequest
0 голосов
/ 12 декабря 2018

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

index   accountid  transdate

0        116490  2018-10-01
1        116490  2018-07-01
2        116490  2018-09-01
3        116490  2018-08-01
4        123033  2018-10-01
5        123033  2018-07-01
6        123033  2018-09-01
7        123033  2018-08-01
8        114175  2018-10-01
9        114175  2018-07-01
10       114175  2018-09-01
11       114175  2018-08-01
12       112962  2018-10-01
13       112962  2018-07-01
14       112962  2018-09-01
15       112962  2018-08-01

Я пытаюсь получить случайное количество строк из каждой группы accountid.Например, здесь у каждого accountid есть 4 transdates, я пытаюсь сгруппировать по accountid и получить минимум 1 и максимум 4 строки из каждой группы.

Ожидаемый результат:

index    accountid  transdate

0        116490 2018-10-01
1        116490 2018-07-01
3        116490 2018-08-01
4        123033 2018-10-01
5        123033 2018-07-01
8        114175 2018-10-01
9        114175 2018-07-01
10       114175 2018-09-01
11       114175 2018-08-01
12       112962 2018-10-01
13       112962 2018-07-01
15       112962 2018-08-01

Я сгруппировал по accountid и применил random.sample к сгруппированному объекту, но каждый раз он возвращает фиксированное количество строк в каждой группе.

1 Ответ

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

Вы можете использовать pandas.Series.sample, чтобы получить случайную выборку для каждой категории, и вы можете установить количество элементов для случайного распределения в 1 ... min(4, len(category)):

import random

def random_sample(x):
    n = random.randint(1, min(4, len(x)))
    return x.sample(n)

df.groupby("accountid").transdate.apply(random_sample)
# accountid    
# 112962     13    2018-07-01
#            14    2018-09-01
#            15    2018-08-01
# 114175     10    2018-09-01
#            11    2018-08-01
# 116490     2     2018-09-01
#            0     2018-10-01
#            3     2018-08-01
# 123033     5     2018-07-01
#            4     2018-10-01
#            7     2018-08-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...