我有一个数据框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
答案 0 :(得分:2)
您仍然可以使用groupby
在factorize
之前对其进行过滤,这会将每个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")