Почему, хотя я нарезал свой оригинальный DataFrame и назначил его другой переменной, мой оригинальный DataFrame все еще изменил значения? - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь рассчитать ежедневную общую стоимость портфеля путем умножения весов каждого актива на ежедневную цену активов.

В настоящее время у меня есть DataFrame tw, который представляет собой все нули, кроме дат что я хочу перебалансировать, что держит вес моих активов. То, что я хотел бы сделать для каждого месяца, заполнить нули весами, с которыми я пытаюсь перебалансировать, до следующей даты перебалансировки, и так далее, и так далее.

Мой код:

df_of_weights = tw.loc[dates_to_rebalance[13]:]

temp_date = dates_to_rebalance[13]
counter = 0
for date in df_of_weights.index:
    if date.year == temp_date.year and date.month == temp_date.month:
        if date.day == temp_date.day:
            pass
        else:
            df_of_weights.loc[date] = df_of_weights.loc[temp_date].values
    counter += 1
    temp_date = dates_to_rebalance[13+counter]

Я понимаю, что если вы нарежете свой DataFrame и назначите его переменной (df_of_weights), изменение значений указанной переменной не повлияет на исходный DataFrame , Однако значения в tw изменились. Некоторое время искали ответ в Интернете, и я действительно в замешательстве.

1 Ответ

0 голосов
/ 09 января 2020

Вы должны использовать copy, чтобы решить проблему так, чтобы:

df_of_weights = tw.loc[dates_to_rebalance[13]:].copy()

Проблема заключается в том, что нарезка обеспечивает представление вместо копирования. Вопрос по-прежнему открыт.

https://github.com/pandas-dev/pandas/issues/15631

...