Я пытаюсь создать двоичные данные из существующего фрейма данных, но для его завершения требуется очень много времени. Есть ли более быстрый способ сделать это?
Теперь у меня есть фрейм данных с несколькими строками, скажем, df, например .:
Index Actions Tries Ratio
0 20 200 0,1
1 10 400 0,025
2 15 500 0,03
3 30 700 0,04
Теперь я хочу преобразовать эти данные в двоичные данные, скажем, df_binary, например.
Index_old Index_new Actions Tries Ratio Success
0 0 20 200 0,1 1
0 1 20 200 0,1 1
0 2 20 200 0,1 1
0 3 20 200 0,1 1
...
0 19 20 200 0,1 1 -> 20 times success(1)
0 20 20 200 0,1 0
0 21 20 200 0,1 0
0 22 20 200 0,1 0
...
0 199 20 200 0,1 0 -> 200-20= 180 times fail(0)
1 200 10 400 0,025 1
1 201 10 400 0,025 1
1 202 10 400 0,025 1
Как видно из приведенного выше примера, Actions / Tries = Ratio. Количество раз, которое должно быть воспроизведено, основано на попытках, количество раз, когда succes = 1, основано на действиях. Количество успешных попыток = 0 основано на попытках - действиях.
import pandas as pd
#create the new DataFrame
df_binary = pd.DataFrame()
#iterate over all rows in the original DataFrame (df)
for index,row in df.iterrows():
#get the number of tries from the row in the df
tries = row['Tries']
#get the number of actions from the row in the df
actions = row['Actions']
#calculate the number of times the tries did not result in action
noActions = tries - actions
#create a temporary df used for appending
tempDf = row
#loop for the range given by tries (row['Tries']) e.g. loop 200 times
for try in range(tries):
if try < actions:
#if the number of actions is lower than tries, set success to 1. E.g. try 1 < 20, set success, try 15 < 20, set success
tempDf['Success'] = 1
#append new data to df_binary
df_binary = df_binary.append(tempDf, ignore_index=True)
else:
#else set success to failure, e.g. try 25 > 20 set failure, try 180 > 20 set failure.
tempDf['Success'] = 0
#append new data to df_binary
df_binary = df_binary.append(tempDf, ignore_index=True)
В этом примере время для завершения не будет таким длинным. Но мой фактический новый df_binary должен содержать около 15 миллионов строк после завершения и содержать еще много столбцов, что занимает очень много времени.
Есть ли способ сделать это быстрее?
Спасибо!