Я пытаюсь выполнить определенную операцию добавления к столбцам в моем фрейме данных, а затем сохранить значения в том же фрейме данных. Мой DataFrame содержит 3796 строк и 11 столбцов, содержащих данные за период с 1928 по 2000 год, с недельными данными. Я хочу взять средневзвешенное значение точек данных (в зависимости от их дат) и сохранить значения в одном и том же кадре данных. Мой код выглядит следующим образом:
import pandas as pd
import numpy as np
df=pd.read_excel("D:\\SUMMER INTERNSHIP CONCORDIA\\Updated Work
here\\Kitsim Reservoir (Number 220)\\Book3_Final.xlsx")
a=0
b=0
k=20
p=3
for z in range(3,11):
a=0
b=0
for x in range(1928,2000):
for y in range(0,12):
if df.iloc[a,1]==1:
df.iloc[b,k]=(7*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/31
a=a+4
b=b+1
if df.iloc[a,1]==2:
df.iloc[b,k]=(4*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/28
a=a+4
b=b+1
if df.iloc[a,1]==4:
df.iloc[b,k]=(1*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+7*df.iloc[a+4,z]+6*df.iloc[a+5,z])/30
a=a+5
b=b+1
if df.iloc[a,1]==3:
df.iloc[b,k]=(4*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+6*df.iloc[a+4,z])/31
a=a+4
b=b+1
if df.iloc[a,1]==5:
df.iloc[b,k]=(3*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+6*df.iloc[a+4,z])/31
a=a+4
b=b+1
if df.iloc[a,1]==6:
df.iloc[b,k]=(3*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+6*df.iloc[a+4,z])/30
a=a+4
b=b+1
if df.iloc[a,1]==7:
df.iloc[b,k]=(1*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+7*df.iloc[a+4,z]+2*df.iloc[a+5,z])/31
a=a+5
b=b+1
if df.iloc[a,1]==8:
df.iloc[b,k]=(5*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+5*df.iloc[a+4,z])/31
a=a+4
b=b+1
if df.iloc[a,1]==9:
df.iloc[b,k]=(2*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+7*df.iloc[a+4,z])/30
a=a+5
b=b+1
if df.iloc[a,1]==10:
df.iloc[b,k]=(7*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/31
a=a+4
b=b+1
if df.iloc[a,1]==11:
df.iloc[b,k]=(4*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+5*df.iloc[a+4,z])/30
a=a+4
b=b+1
if df.iloc[a,1]==12:
df.iloc[b,k]=(2*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/31
a=a+5
b=b+1
k=k+1
p=p+1
Отображаемая ошибка:
D:\anaconda\lib\site-packages\pandas\core\indexing.py in
_is_valid_integer(self, key, axis)
1540 l = len(ax)
1541 if key >= l or key < -l:
-> 1542 raise IndexError("single positional indexer is out-of-
bounds")
1543 return True
1544
IndexError: single positional indexer is out-of-bounds
Я прочитал ответ, в котором говорилось, что это может быть из-за того, что у меня недостаточно столбцов для хранения моего значения, для того же самого я создал 50 пустых столбцов в кадре данных, но ошибка все равно была той же. Я также хотел бы отметить, что когда я пытаюсь,
a=0
b=0
k=20
z=3
df.iloc[b,k]=(7*df.iloc[a,z]+7*df.iloc[a+1,z]+7*df.iloc[a+2,z]+7*df.iloc[a+3,z]+3*df.iloc[a+4,z])/31
a=a+4
b=b+1
в отдельной ячейке (без петли), работает совершенно нормально. Как мне теперь поступить!?