如何有效地索引Groupby对象?

时间:2019-02-13 00:59:47

标签: python pandas pandas-groupby

我有一个数据框dfyg,它是一个包含120,000个组的Groupby对象。从这些组中选择10,000个并将它们传递给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 :(得分:2)

您仍然可以使用groupbyfactorize之前对其进行过滤,这会将每个groupkey值分配给一个int,然后对小于10000的数字进行切片,或者可以使用{{1} }(例如np.random.choice

groupneeed =np.random.choice(np.unique(pd.factorize(df.groupbykey)[0]),2,replace=False)

答案 1 :(得分:2)

您可以使用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")
相关问题