Разбейте данные по строкам и сгенерируйте список данных в Python - PullRequest
5 голосов
/ 03 октября 2019

У меня есть фрейм данных:

data = {'Timestep'      : [0,1,2,0,1,2,3,0,1],
        'Price'           : [5,7,3,5,7,10,8,4,8],
        'Time Remaining' : [10.0,10.0,10.0,15.0,15.0,15.0,15.0,12.0,12.0]}
df = pd.DataFrame(data, columns = ['Timestep','Price','Time Remaining'])

Dataframe

Я хотел бы преобразовать фрейм данных в список с мультипликативными фреймами данных, где каждая временная последовательность шагов (0-2,0-3,0-1) это один кадр данных. Более того, я хочу, чтобы временные шаги были индексами в каждом наборе данных. В итоге это должно выглядеть примерно так:

list with multiple dataframes

У меня есть фрейм данных с тысячами строк и нерегулярных последовательностей, поэтому я предполагаю, что мне придется перебирать строки.

Кто-нибудь знает, как я могу подойти к этой проблеме?

Ответы [ 2 ]

4 голосов
/ 03 октября 2019

Из того, что я понял - вам нужен новый DataFrame всякий раз, когда ваш Timestep достигает 0 -

Это то, что вы можете попробовать

#This will give you the location of all zeros [0, 3, 7]
zero_indices = list(df.loc[df.Timestep == 0].index)
#We append the number of rows to this to get the last dataframe [0, 3, 7, 9]
zero_indices.append(len(df))
#Then we get the ranges - tuples of consecutive entries in the above list [(0, 3), (3, 7), (7, 9)]
zero_ranges = [(zero_indices[i], zero_indices[i+1]) for i in range(len(zero_indices) - 1)]
#And then we extract the dataframes into a list
list_of_dfs = [df.loc[x[0]:x[1] - 1].copy(deep=True) for x in zero_ranges]
0 голосов
/ 03 октября 2019

В настоящее время на мобильном устройстве не можете это проверить, но вы можете выполнить что-то вроде следующего:

current_sequence_index = -1
sequences = []
for __, row in data.iterrows():
    if row.Timestep == 0:
        sequences.append(pd.DataFrame())
        current_sequence_index += 1

    sequences[current_sequence_index].append(row, ignore_index=True)   

По сути, это выполняет итерацию ваших данных и генерирует новый DataFrame всякий раз, когда временной шаг равен 0. Это решение имеет некоторые предположения: 1. Начало временного шага всегда равно 0. 2. Временные шаги всегда последовательны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...