我在python中编写了一个带有三个循环的函数,这很耗时。是否可以通过其他方式在更短的时间内完成相同的操作。
以下是您可以在最后运行的代码和示例数据
#Expand files to minute-level
def expand_b34(data):
final_list = []
df_columns = list(data.columns.tolist())
for i in range(len(data)):
#print i
row_list = np.repeat(data.values[i][np.newaxis,:], data['DURATION'].loc[i], axis=0).tolist()
start_end_list = range(data['START'].loc[i], data['END_MINUTE'].loc[i])
for j in range(len(row_list)):
row_list[j].extend([start_end_list[j]])
for k in row_list:
final_list.append(k)
data = pd.DataFrame(final_list)
data.columns = df_columns + ['START_MINUTE']
data = data.drop(['START','END_MINUTE'], axis=1)
return data
df = expand_b34(test)
Sample data
date Id LD GOOD_AP_ORIG ap_station JULIAN_DAY START DURATION END_MINUTE PLDS PL PLT PLAY
16080 4012007 1 G 5000 16081 0 60 60 0 0 0
16080 4012007 1 G 5000 16081 60 60 120 0 0 0
16080 4012007 1 G 5000 16081 120 60 180 0 0 0
16080 4012007 1 G 5000 16080 180 60 240 0 0 0
16080 4012007 1 G 5000 16080 240 120 360 0 0 0
Attached is the sample data for your reference
代码工作流程:首先它将计算" START"之间的差异。和" END_MINUTE"然后扩展对差异的观察。因此,如果差异为10,则将为同一观察生成10行观察,这些观察具有相同的数据,除了" START_MINUTE"变量。 START_MINUTE从0开始(因为对于特定的观察START = 0)并以9.结束。对于单次观察,循环已经创建了10个重复观察,除了开始分钟变量,其从0到9变化。
有人可以通过优化代码帮助进行相同的观察扩展