我有一个数据框:
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'])
我想将数据帧转换为包含多个数据帧的列表,其中每个时间步序列(0-2,0-3,0-1)是一个数据帧。此外,我希望时间步长成为每个数据集中的索引。最后应该看起来像这样:
我有一个包含数千行和不规则序列的数据框,所以我想我必须遍历行。
有人知道我该如何解决这个问题?
答案 0 :(得分:4)
据我了解-每当Timestep
达到0时,您都需要一个新的DataFrame-
这是您可以尝试的
#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]
答案 1 :(得分:0)
现在在移动设备上无法测试,但是您可以通过以下操作来完成此操作:
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)
基本上,这将遍历您的数据并在Timestep为0时生成一个新的DataFrame。此解决方案有一些假设: 1. Timestep的开始始终为0。 2.时间步长总是顺序的。