pandas скользящее окно и применить, чтобы получить сумму против другого кадра данных, чтобы создать список - PullRequest
0 голосов
/ 16 марта 2020

Мне очень сложно ..... У меня есть датафрейм, называемый чтениями.

readings = pd.DataFrame([1, 1, 3, 6, 7, 9, 5, 11, 10, 15, 17, 18], columns=['readings'])
sets = pd.DataFrame([1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6], columns=['sets'])
readings_df = pd.concat([readings, sets], axis=1)
print(readings_df)
fixed_df = pd.DataFrame([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], columns =['fixed'])
print(fixed_df)

Я делаю 2 чтения каждый день, это представлено в столбце наборов. Что мне нужно, так это сжать read_df с помощью окна суммы значений этих чтений и вывести его так, чтобы оно сравнивалось с fixed_df, чтобы получить что-то вроде одного горячего вектора. И этот вектор хранится в виде списка в новом df, который будет иметь значение len readings_df / 2. Размер окна должен быть динамическим c.

Так что, если window = 1, это будет мой новый df:

[2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ->1, 1
[0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ->3, 6
[0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0] ->7, 9
[0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0] ->5, 11
etc

, чтобы вы могли видеть каждый вид представляет позицию в fixed_df.

Если окно равно 2, набор 1 не может быть рассчитан. он может начать расчет только с набора 2 и далее. Вот то, что я хотел бы иметь.

Nan -> ?, ?, 1, 1                                      
[2,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0] ->1, 1, 3, 6
[0,0,1,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0] ->3, 6, 7, 8
[0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0] ->7, 9, 5, 11

Это всего лишь некоторые смоделированные данные, у меня есть около 20 тыс. Строк и они растут, было бы хорошо, если бы я не использовал циклы, но использовал apply или некоторые другие встроенные pandas если возможно. Я ломал голову, как это сделать наиболее эффективно, это было слишком сложно для меня ... любая помощь очень ценится

Спасибо за миллион.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...