Мне нужно сделать анализ накопленной стоимости за каждый день временного ряда - PullRequest
1 голос
/ 19 марта 2020

У меня есть DataFrame с временным рядом. Мне нужно получить первую строку и добавить, как мои инвестиции. Следующая строка - другой день, и мне нужно сравнить, чтобы получить различия значений, которые будут моими накопленными значениями за 1 день.

Мои данные:

Мои данные

Перевод: Данные = Дата

Кота = Квота

Patrimonio Liquido = net стоит

На данный момент мой код выглядит так:

len_fundo = len(self.fundo)
    investiment = self.fundo.iloc[0]
    dict_accumulated = {}
    for value in range(1, len_fundo):
        next_line = self.fundo.iloc[value]
        dict_accumulated['Data'] = next_line['Data']
        dict_accumulated['Acumulado'] = next_line['PL'] - investiment['PL']
        investiment = next_line
        accumulated = pd.DataFrame(data=dict_accumulated, index=[value])
    return accumulated

Но результат - только последняя строка.

  Data         Acumulado
4 2019-12-06   942355.3

Я знаю, это потому, что python dict не принимает дубликаты ключей; следовательно, он заменяет ключи, но как я могу решить этот случай? Мне нужно сгенерировать новый DF со столбцами «Дата» и «Накопленные значения» для каждого дня ...

Результатом будет новый DF, подобный этому:

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Вы не предоставляете полностью функционирующий пример, поэтому я не могу проверить, что это работает как задумано, но вы не можете просто создать списки dict_accumulated['Data'] и dict_accumulated['Acumulado'] и затем добавить их в каждый l oop ? Как то так:

    len_fundo = len(self.fundo)
    investiment = self.fundo.iloc[0]
    dict_accumulated = {}
    dict_accumulated['Data'] = []
    dict_accumulated['Acumulado'] = []
    for value in range(1, len_fundo):
        next_line = self.fundo.iloc[value]
        dict_accumulated['Data'].append(next_line['Data'])
        dict_accumulated['Acumulado'].append(next_line['PL'] - investiment['PL'])
        investiment = next_line
        accumulated = pd.DataFrame(data=dict_accumulated, index=[value])
    return accumulated
0 голосов
/ 19 марта 2020

Я думаю, что вы должны использовать

df['gains'] = df['current'].shift(1) - df['current'] # difference per day
df['acumulado'] = df['gains'].cumsum() # for cumulative sum of gains

Использование циклов с pandas обычно плохая практика

...