我需要对时间序列中每天的累积值进行分析

2024-09-22 10:23:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,它有一个时间序列。我需要得到第一行,并添加像我的投资。下一行是另一天,我需要比较以获得值差,这将是我1天的累积值

我的数据:

My Data

翻译: 数据=日期

Cota=配额

帕特里莫尼奥液化石油气=净值

目前,我的代码如下所示:

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,如下所示:

enter image description here


Tags: 数据selfdfdatalenvaluelinedict
2条回答

您没有提供一个功能完整的示例,因此我无法测试它是否能按预期工作,但您能否只制作dict_accumulated['Data']dict_accumulated['Acumulado']列表,然后在每个循环中附加到它们?大概是这样的:

    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

我认为你应该使用

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

将循环与pandas一起使用通常是不好的做法

相关问题 更多 >