如何按每个块的行数列表拆分数据框?

时间:2019-12-17 09:07:44

标签: python pandas list dataframe

我有一个数据框,我想根据列表中的元素进行裁剪。例如,我有一个range_list[16, 14, 2...]

然后,我想剪切数据帧,以使第一个块长16行,第二个部分14个,第三个部分2 ..依此类推。将其放在列表中也可能会有所帮助。

3 个答案:

答案 0 :(得分:2)

使用numpy.split。这可能需要一定范围的索引,因此需要您cumsum范围列表。

indices = np.cumsum(range_list, dtype=np.int32)

np.split(df, indices)

示例

range_list = [16, 14, 2]

np.random.seed(0)
df = pd.DataFrame(np.random.randn(sum(range_list), 2))

indices = np.cumsum(range_list, dtype=np.int32)

np.split(df, indices)

[返回]

在此示例中返回一个包含3个DataFrames,形状为(16, 2)(14, 2)(2, 2)的列表

[           0         1
 0   1.060679  1.092185
 1  -0.043971 -1.394001
 2   1.106233 -0.711420
 3  -0.585148  0.179987
 4  -0.871562  0.730840
 5   0.810119 -0.130510
 6  -0.957646 -0.324547
 7   0.235788 -0.460025
 8  -0.262714 -0.496833
 9   0.454519 -1.244402
 10  0.084796  1.587114
 11 -0.353880  1.110543
 12 -0.570345  0.774158
 13  1.772536  1.283950
 14 -1.682226 -0.376789
 15  0.956894  0.081805,            0         1
 16  0.014841  0.110091
 17 -0.408881  0.260970
 18  0.004939  0.940186
 19 -2.056951  0.353928
 20  0.618294 -2.201036
 21  1.375224  0.526367
 22 -0.424886 -1.253565
 23  1.785862  0.774936
 24 -0.341340 -1.056191
 25 -0.274463 -1.637185
 26  1.596336  2.311630
 27 -0.479840  1.021640
 28 -1.307765 -0.232664
 29  0.243427  0.339242,            0         1
 30  0.345476  0.331306
 31  0.895437 -1.163441, Empty DataFrame
 Columns: [0, 1]
 Index: []]

答案 1 :(得分:0)

我不确定我是否理解正确。 如果您只想拆分列表,则可以执行以下操作:

def split_list(l, range_list):
    i = 0
    for x in range_list:
        start = i
        end = start + x
        print(l[start:end])

答案 2 :(得分:0)

您可以使用列表元素的累加和创建一个数组,添加一个初始零和一个最终-1,然后对其进行迭代以对初始数据帧进行切片:

ls = [16,14,2, ..]
chucks = np.cumsum(ls)
c=np.zeros(len(chucks)+2)

c[1:-1] = chucks
c[-1] = -1

all_dfs= []
for i range(len(c)-1):
    df_list.append(df[c[i]:c[i+1]])