#python #pandas
#python #панды
Вопрос:
У меня есть функция, которая должна реализовывать некоторые преобразования и вычисления в df, код выполняется, но после его выполнения df остается таким же, как и раньше.
РЕДАКТИРОВАТЬ: проблема решается, когда я удаляю строку 2 (pd.merge), но я хотел бы понять, почему.
def Tilt_contribution(ptf, data_factors, data_universe, Sample_size_adjustment:bool):
ptf['ActiveWeight'] = ptf['PortfolioWeight']- ptf['BenchmarkWeight']
ptf = pd.merge(ptf, data_factors, on = ['ISIN','SecurityName'], how = 'left' )
sample_size_adj = 1 #initialisation
if Sample_size_adjustment == True:
sample_size_adj = Sample_size_adj(ptf)
for column in factor_list:
#Weighted std
universe_wght_std = Universe_weighted_std(data_universe, column)
#Benchmark weighted average
benchmk_wght_avg = Benchmark_weighted_avg(ptf, column)
#Tilt Contrib
col_index = ptf.columns.get_loc(column)
ptf.insert(col_index 1, column ' Tilt Contribution', 0)
for idx in ptf.index:
tilt_cont = (ptf.at[idx, column] - benchmk_wght_avg)*ptf.at[idx, 'ActiveWeight']/(sample_size_adj * universe_wght_std)
if math.isnan(tilt_cont):
tilt_cont=0
ptf.at[idx, column ' Tilt Contribution'] = tilt_cont
global Tilt
Tilt = ptf.sum()
Ответ №1:
Вы устанавливаете глобальную переменную Tilt
с суммой, ptf
но не возвращаете измененный ptf
фрейм данных.
Комментарии:
1. Но почему в других функциях изменения, применяемые к df, являются глобальными без необходимости их возврата