Как эффективно индексировать объект Groupby? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть фрейм данных dfyg, который является объектом Groupby, содержащим 120000 групп.Как лучше всего выбрать 10000 из этих групп и передать их в функцию multiprocessing.Pool.map()?

Я могу вспомнить цикл for, который выбирает 10 000 групп и помещает их в список.Я не могу отфильтровать кадр данных перед группировкой, потому что я хотел бы либо передать все строки в группе в функцию map, либо ни в одну вообще.

i = 0
iter_list = []
for name, group in dfyg:
    iter_list.append(group)
    i = i + 1
    if i >= 10000:
        break

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вы можете создать подмножество групп, используя свойство groups.keys(), затем использовать groupby.filter():

subset = list(gb.groups.keys())[:n_grp]
gb.filter(lambda x: x.name in subset)

Данные:

import numpy as np
import pandas as pd

n = 1000
n_grp = 2
grp = ["A", "B", "C", "D"]
data = {"grp": np.random.choice(grp, size=n, replace=True),
        "val": np.random.random(size=n)}
df = pd.DataFrame(data)
gb = df.groupby("grp")
0 голосов
/ 13 февраля 2019

Вы все еще можете отфильтровать их до groupby, используя factorize, это присвоит каждому значению групповой клавиши одно значение типа int, затем вы нарежете число меньше 10000 или вы можете выбрать случайное число, используя np.random.choice (например, groupneeed =np.random.choice(np.unique(pd.factorize(df.groupbykey)[0]),2,replace=False))

df=pd.DataFrame({'groupbykey':list('aabbddcc')})
df[pd.factorize(df.groupbykey)[0]<2]
  groupbykey
0          a
1          a
2          b
3          b
#df[np.isin(pd.factorize(df.groupbykey)[0],groupneeed )]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...