Более быстрые способы нарезки большого набора данных - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно нарезать большой набор данных в соответствии с определенной длиной. Я сделал код, но это занимает много времени выполнения.

Во-первых, у меня есть фрейм данных, который состоит из значений, которые большой набор данных должен быть разрезан.

df
sl no    length_of each_column
1           3
2           20
3           30
4           40
5           50

Большой набор данных содержит около ста тысяч строк и выглядит примерно так

sl no      values
0           10
1           20
3           30
4           40
5           50
6           60
7           10
8           49
9           59
10          20
and so on 

Мой результирующий набор данных должен разрезать большой набор данных, беря значения из фрейма данных, который содержит длину каждого столбца. Если предположить, что длина каждого столбца равна 3, то он должен нарезать большие данные, установленные на 3, затем переместиться вперед на одну строку, а затем снова нарезать 3 точки данных

Снова переместитесь вперед на одну строку и нарежьте 3 точки данных и так далее, пока не будут приняты все возможные комбинации требуемой длины.

Результирующий набор данных упомянут ниже

Результирующий набор данных, если разделен на 3

Resultant data frame for column length 3
sl no    col1     col2   col3  - - - - - - - 
0          10      20     30
1          20      30     40
2          30      40     50

и так далее до тех пор, пока не будут созданы все возможные комбинации длины 3.

1 Ответ

0 голосов
/ 31 мая 2019

Вот, пожалуйста,

import pandas as pd

# setup test data
slice_options = {'length_of each_column': ['3', '5']}
slice_options = pd.DataFrame(data=slice_options)

data = {'values': ['1', '2', '3', '4', '5', '6', '7', '8', '9']}
data = pd.DataFrame(data=data)


# store data frames in list
out_data = list(range(slice_options.shape[0]))

count = 0
for index, row in slice_options.iterrows():
    # create empty data frame
    out_data[count] = pd.DataFrame()
    # collect data
    for i in range(data.shape[0]):
        # select data rows
        select_data = data.iloc[i:i+int(row.values[0])]
        # handle rows number
        if select_data.shape[0] == int(row.values[0]):
            # fill data frame
            out_data[count]['column' + str(i)] = select_data.values.ravel()
    count += 1

Вывод:

df1 (3 elements):

  column0 column1 column2 column3 column4 column5 column6
0       1       2       3       4       5       6       7
1       2       3       4       5       6       7       8
2       3       4       5       6       7       8       9

df2 (5 elements):

  column0 column1 column2 column3 column4
0       1       2       3       4       5
1       2       3       4       5       6
2       3       4       5       6       7
3       4       5       6       7       8
4       5       6       7       8       9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...