我有一个数据框,我想根据列表中的元素进行裁剪。例如,我有一个range_list[16, 14, 2...]
答案 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]])