Мне очень сложно ..... У меня есть датафрейм, называемый чтениями.
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 если возможно. Я ломал голову, как это сделать наиболее эффективно, это было слишком сложно для меня ... любая помощь очень ценится
Спасибо за миллион.