Более быстрые способы разделения большого набора данных

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

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

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.

Не могли бы вы переформатировать отображение данных вашего фрейма данных?

Will 31.05.2019 09:05

@Kundan, можете ли вы опубликовать заголовок своего фрейма данных и желаемый результат?

Zaraki Kenpachi 31.05.2019 09:07

@Kundan хорошо, вам нужно нарезать данные с постоянным шагом или создать все возможные комбинации, такие как [10,20,30], [10,40,50], [10,20,50] ...?

Zaraki Kenpachi 31.05.2019 09:21

с постоянным шагом... если это 3, то сделать все возможные комбинации длины столбца 3... если это 10, делает все возможные комбинации длины столбца 10 из большего набора данных

Kundan 31.05.2019 09:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
355
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну вот:

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

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

Kundan 31.05.2019 23:26

@Kundan, это решение с использованием фрейма данных pandas довольно быстрое, на данный момент я не пытаюсь найти более быстрое решение.

Zaraki Kenpachi 01.06.2019 07:30

Другие вопросы по теме