这是一个基于以下问题的问题:Split dataframe into grouped chunks
我一直试图将一个大数据集分解为不同的块,并使用上面问题中提出的解决方案来做到这一点。这是我指的代码:
df = pd.DataFrame(data=['a', 'a', 'b', 'c', 'a', 'a', 'b', 'v', 'v', 'f'], columns=['A'])
def iter_by_group(df, column, num_groups):
groups = []
for i, group in df.groupby(column):
groups.append(group)
if len(groups) == num_groups:
yield pd.concat(groups)
groups = []
if groups:
yield pd.concat(groups)
for group in iter_by_group(df, 'A', 2):
print(group)
打印结果为:
A
0 a
1 a
4 a
5 a
2 b
6 b
A
3 c
9 f
A
7 v
8 v
问题是我没有设法去分别调用每个块,就好像我只是调用group一样,它只返回最后一个组;如果不是print,我在last for循环中使用return给我第一块。我该如何更改代码,以便可以分别调用每个块?
答案 0 :(得分:1)
使用pd.factorize
形成组,然后将分组的对象存储在字典中。这是基于发生的顺序。将sort=True
添加到pd.factorize
以根据已排序的键顺序形成组
N = 2
col = 'A'
d = dict(tuple(df.groupby((pd.factorize(df[col])[0]+N)//N)))
d[1]
# A
#0 a
#1 a
#2 b
#4 a
#5 a
#6 b
d[2]
# A
#3 c
#9 f
d[3]
# A
#7 v
#8 v