遍历一个熊猫数据框并返回多个数据框

时间:2019-07-24 19:10:31

标签: python pandas

这是一个基于以下问题的问题: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给我第一块。我该如何更改代码,以便可以分别调用每个块?

1 个答案:

答案 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