У меня простой вопрос, но я боролся с ответом. У меня есть DataFrame, из которого я хочу заменить 3 самых больших значения их 7-дневными скользящими средними, но в порядке индекса. Так для DataFrame, как этот:
Sales
2
4
6
8
10
12
14
100
100
200
Я хочу заменить сначала две строки 100
в Sales
, а затем строку 200
. Я попробовал следующее:
df.Sales.replace(df.Sales.nlargest(3).sort_index(),df.Sales.rolling(window=7).mean())
Но это приводит к следующей ошибке:
AttributeError: у объекта 'numpy.float64' нет атрибута 'replace'
Я знаю, что это работает:
df.Sales.replace(df.Sales.max(),df.Sales.rolling(window=7).mean())
И я мог бы сделать это 3 раза, но у меня проблема в том, что он сначала заменит 200
, а затем и другие, так что это не совсем то, что мне нужно.
Я думаю, что-то вроде этого будет работать:
for i in df.Sales.nlargest(3).sort_index():
df.Sales.replace(i, df.Sales.rolling(window=7)
Но я бы предпочел избегать петель. Является ли это возможным?
РЕДАКТИРОВАТЬ: ожидаемый результат будет:
Sales
2
4
6
8
10
12
14
8
8.86
9.55
Другими словами, замена первых 100 на среднее значение от 2 до 14, что составляет 8. Затем замена вторых 100 на среднее значение от 4 до второго 8, что составляет 8,86 и т. Д.