Я не создаю другую переменную, как я ожидаю

#python #while-loop #counter

Вопрос:

Я пытаюсь создать текущее (движущееся) общее значение, называемое var1 значением . Таким образом, я бы хотел, чтобы это выглядело так:

Таким образом, если var1 = 5, 4, 3, 12 для первых четырех значений соответственно я хочу 9 (5 4), 7 (4 3), 15 (3 12) для ОБЩИХ значений и т. Д.

Вместо этого он просто принимает 2 РАЗА var1 , так что первые четыре значения total равны:

10, 8, 6, 24 и т.д.

Это код, который я пытаюсь использовать. Кажется, это работает (без ошибок)

 import datetime
import pandas as pd
data=pd.read_csv("C:/Users/ameri/tempjohn.csv")
data.total=0
i=1
while i < 3:
data.total =data.var1
i =1
print(data.total)
 

кто-нибудь может помочь?
спасибо
, Джон

Ответ №1:

Фрейм данных Pandas не является простой переменной Python, даже если вы выполняете с ним вычисления: он ведет себя более или менее как векторизованный 2D-массив.

Что происходит в вашем коде:

  1. вы устанавливаете столбец total кадра данных равным 0: data.total становится серией той же длины, что и кадр данных, содержащий только 0 значений.
  2. вы выполняете (для i == 1 ) data.total = data.var1 : поскольку ранее он содержал 0 значений, data.total теперь является копией (серии) data.var1
  3. вы выполняете (для i == 2 ) data.total = data.var1 : ок, data.total теперь содержит в два раза больше значений data.var1
  4. конец цикла, потому 3 < 3 что это ложь…

Что делать дальше:

  1. прочитайте учебник по Пандам, если вы хотите пойти этим путем, но, пожалуйста, помните, что Панды-это не Python, и некоторые объекты Панды имеют другую семантику, чем стандартные объекты Python… конечно, забудьте о Пандах, если вы хотите изучать только Python
  2. Если вы действительно хотите сделать это по-панд, волшебное слово — shift : data.total = data.var1 data.var1.shift()