У меня есть 2 столбца в Pandas DataFrame и функция генератора словаря, которая берет входные данные из скользящих индексов данных и выдает выходные данные в виде словаря, а затем должна добавить ключи в виде столбца и значения в виде строк в существующий pandas кадр данных из указанного индекса c. Пример DataFrame:
+-------+---+---+
| Index | A | B |
+-------+---+---+
| 0 | 2 | 4 |
| 1 | 5 | 6 |
| 2 | 1 | 7 |
| 3 | 4 | 6 |
| 4 | 2 | 7 |
| 5 | 8 | 4 |
| 6 | 3 | 1 |
| 7 | 8 | 2 |
+-------+---+---+
Код, который берет входные строки (окно) из кадра данных, приведен ниже:
def stack(df, window=3):
for i in range(0, df.shape[0] - window):
dfp = df[i:i+window]
mp = addition(dfp) #a dict generator function to add 3 previous values of column a and b and give output with a single dict {'C': value, 'D': value}
for key, value in mp.items(): # to assign keys as column and values as rows
df.loc['i+window', key] = value # to assign rows from a specific index -3
return df
Функция for-l oop создает 1 словарь с каждый l oop, который выглядит следующим образом:
{'C': 8, 'D': 17} #1st loop
{'C': 10, 'D': 19} #2nd loop
{'C': 7, 'D': 20} #3rd loop
{'C': 14, 'D': 17} #4th loop
{'C': 13, 'D': 12} #5th loop
Но есть ошибка в выводе, в то время как применение вышеупомянутой более медленной функции делает все значения строк в NaN, кроме последнего. Я хочу, чтобы ожидаемый вывод добавлялся к кадру данных строка за строкой с каждым l oop, а окончательный кадр данных должен выглядеть следующим образом:
+-------+---+---+-----+-----+
| Index | A | B | C | D |
+-------+---+---+-----+-----+
| 0 | 2 | 4 | NaN | NaN |
| 1 | 5 | 6 | NaN | NaN |
| 2 | 1 | 7 | 8 | 17 |
| 3 | 4 | 6 | 10 | 19 |
| 4 | 2 | 7 | 7 | 20 |
| 5 | 8 | 4 | 14 | 17 |
| 6 | 3 | 1 | 13 | 12 |
+-------+---+---+-----+-----+
Помимо вышеуказанного ожидаемого вывода, я также хочу сделать цикл как можно быстрее. Пожалуйста, дайте мне понять, где я иду не так, и простите меня за мой плохой английский sh ..