У меня есть 2 Pandas Dataframes, X_ol и y_ol, с формой 29000 x 29 и 29000 x 21, и я запускаю вложенный для l oop через эти данные, чтобы генерировать больше данных (как вы ' См. ниже). То, что я пытаюсь достичь с помощью этого для l oop, выглядит примерно так:
DataFrame X_ol DataFrame y_ol
id Date c1 c2 c3 c1 c2 c3
1 2000 0 1 1 0 1 1
2 2001 1 0 1 1 0 1
3 2002 1 1 0 1 1 0
4 2003 1 1 1 1 1 1
# (New DataFrame X) # (Second New DataFrame, y)
id Date c1 c2 c3 c1 c2 c3
1 2000 0 0 1 0 1 0
1 2000 0 1 0 0 0 1
2 2001 0 0 1 1 0 0
2 2001 1 0 0 0 0 1
3 2002 0 1 0 1 0 0
3 2002 1 0 0 0 1 0
4 2003 0 1 1 1 0 0
4 2003 1 0 1 0 1 0
4 2003 1 1 0 0 0 1
, поэтому он просматривает фрейм данных y_ol строка за строкой и для каждого значения ячейки 1 создает новую строку в кадре данных X, при этом эта ячейка отключена, и создает новую строку в кадре данных y с соответствующей ячейкой, а все другие значения в той же строке в кадре данных y теперь будут отключены. Я написал этот код, который делает это правильно, но занимает так много времени. 12+ минут создания 2 фреймов данных из 60000 строк, есть ли встроенные pandas функции / методы, которые можно использовать, чтобы сделать этот более эффективным или другой метод, полностью исключающий for l oop?
for i in range(len(y_ol)):
ab = y_ol.iloc[i].where(y_ol.iloc[i]==1)
abInd = ab[ab==1.0].index
for j in abInd:
y_tmp = deepcopy(y_ol.iloc[i:i+1, :])
y_ol[j][i] = 0
conc = pd.concat([X_ol.iloc[i:i+1,:], y_ol.iloc[i:i+1, :]], axis=1)
X = X.append(conc)
y_tmp.iloc[:, :] = 0
y_tmp[j] = 1
y = y.append(y_tmp)
y_ol[j][i] = 1
Заранее спасибо