Похоже, нужно индексировать по позициям, поэтому измените ix
на iloc
.
Так что для первого ряда нужно изменить:
wAvg = sum(df.ix[:,1] * df.ix[:,2])
на:
wAvg = sum(df.iloc[:,1] * df.iloc[:,2])
И для фильтрации по boolean indexing
необходимо loc
и выбрать имена столбцов путем индексации по df.columns[2]
:
df.ix[df.ix[:,2] > outlier, 2] = outlier
df.ix[df.ix[:,2] < -outlier, 2] = -outlier
до:
df.loc[df.iloc[:,2] > outlier, df.columns[2]] = outlier
df.loc[df.iloc[:,2] < -outlier, df.columns[2]] = -outlier
Для получения дополнительной информации проверьте pandas docs .
РЕДАКТИРОВАТЬ:
for k in np.arange(0,3,1):
wAvg = sum(df.iloc[:,1] * df.iloc[:,2]) #Weight Average
Std = df.iloc[:,2].std()
df.iloc[:,2] = (df.iloc[:,2]-wAvg)/Std
df.loc[df.iloc[:,2] > outlier, df.columns[2]] = outlier
df.loc[df.iloc[:,2] < -outlier,df.columns[2]] = -outlier