Разделение датафрейма на основе содержимого строк

Вопрос или проблема

У меня есть датафрейм с 50000 строк и 5 столбцов.
введите описание изображения здесь

В столбце VarName есть два типа данных: 1 – DatiStatistica_CombiWeight, 2 – DatiStatistica_TargetWeight

Я отфильтровал строки, содержащие DatiStatistica_TargetWeight

введите описание изображения здесь

Я хотел бы разделить датафрейм на основе строк, содержащих данные DatiStatistica_TargetWeight, следующим образом: строки между двумя строками, содержащими DatiStatistica_TargetWeight, формируют отдельный датафрейм.

Ответ или решение

Для решения вашей задачи по разделению DataFrame на основе содержимого строк, вам необходимо выполнить несколько шагов с использованием библиотеки pandas в Python. Я объясню весь процесс поэтапно.

  1. Импортирование библиотек:

Убедитесь, что у вас установлен пакет pandas. Если нет, установите его с помощью команды pip install pandas. Затем импортируйте pandas в вашем Python-скрипте:

import pandas as pd
  1. Создание примера DataFrame:

Предположим, у вас есть DataFrame с названием df:

data = {
    'VarName': ['DatiStatistica_CombiWeight', 'some_data_1', 'some_data_2', 'DatiStatistica_TargetWeight', 
                'some_data_3', 'some_data_4', 'DatiStatistica_TargetWeight', 'some_data_5', 
                'DatiStatistica_CombiWeight'],
    'Value1': [1, 2, 3, 4, 5, 6, 7, 8, 9],
    'Value2': [10, 20, 30, 40, 50, 60, 70, 80, 90],
    'Value3': [100, 200, 300, 400, 500, 600, 700, 800, 900],
    'Value4': [1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000]
}

df = pd.DataFrame(data)
  1. Фильтрация строк:

Сначала отфильтруйте строки, содержащие DatiStatistica_TargetWeight, и получите индексы, на которых они находятся:

target_weight_indices = df[df['VarName'] == 'DatiStatistica_TargetWeight'].index
  1. Создание нового DataFrame:

Теперь вы можете использовать индексы для извлечения подмассивов между строками, содержащими DatiStatistica_TargetWeight. Вам нужно будет перебрать полученные индексы и извлечь строки между ними:

dataframes = []
for i in range(len(target_weight_indices) - 1):
    start = target_weight_indices[i] + 1
    end = target_weight_indices[i + 1]
    new_df = df.iloc[start:end]
    dataframes.append(new_df)
  1. Вывод результатов:

Теперь у вас есть список DataFrame, каждый из которых содержит строки между DatiStatistica_TargetWeight:

for idx, dataframe in enumerate(dataframes):
    print(f"DataFrame {idx + 1}:")
    print(dataframe)

Этот код последовательно создаст список DataFrame, каждый из которых будет представлять собой фрагменты вашего основного DataFrame, находящиеся между строками, содержащими DatiStatistica_TargetWeight.

Таким образом, вы можете легко разделить ваш DataFrame на несколько частей в зависимости от содержимого строк.

Оцените материал
Добавить комментарий

Капча загружается...