我想用时间序列数据帧中的值创建历史数据框。
今天,我的df1如下:
df1:
A B C
0 1.0 2.0 3.0
明天,我的df1如下:
df1:
A B C
0 1.5 2.6 3.7
所以我明天想要的输出如下:
df2:
A B C
0 1.0 2.0 3.0
1 1.5 2.6 3.7
我只想继续每天添加' df1'到一个新的数据框(' df2'),这样我就可以创建一个包含每日值的历史数据框。你能帮帮我吗?谢谢。
答案 0 :(得分:0)
答案 1 :(得分:0)
根据我的理解,您每天都会更新一次加载到df1
的来源。然后,您要将df1
添加到df2
,该df1
存储您目前在df1
中看到的所有值。
我的建议基于df2.txt
与您的结构相同,但具有随机值。每次运行此代码时,它都会将这些值附加到文件夹c:\timeseries
中存储的文本文件C:/timeseries/
。
我们走了:
将文件夹.txt
添加到您的系统。然后添加一个空的dates,A,B,C
文件,输入字符串df2.txt
,并将其另存为df1
。
以下代码段将占用该文本文件的长度,并使用它来构建每日索引以模拟您的情况。该索引将是df1
的日期,否则每次运行代码段时都会填充随机数。每次运行代码段时,df2
的数据都会附加到# imports
import os
import pandas as pd
import numpy as np
os.chdir('C:/timeseries/')
# creates df1 with random numbers
df1 = pd.DataFrame(np.random.randint(0,10,size=(1, 3)), columns=list('ABC'))
# Read your historic values (will be empty the first time you run it)
df2 = pd.read_csv('df2.txt', sep=",")
df2 = df2.set_index(['dates'])
# To mimic your real life situation, I'm adding a timeseries with a datestamp
# that starts where df2 ends. If df2 i empty, it starts from 01.01.2018
# Make a dummy datelist to mimic your situation
datelist = pd.date_range(pd.datetime(2018, 1, len(df2)).strftime('%Y-%m-%d'), periods=1).tolist()
df1['dates'] = datelist
df1 = df1.set_index(['dates'])
df1.index = pd.to_datetime(df1.index)
df2 = df2.append(df1)
df2.to_csv('df2.txt')
print(df2)
。
所以,请运行此代码段一次......
A B C
dates
2018-01-01 00:00:00 8.0 6.0 8.0
...获得此输出:
df1
这些是目前df2
和 A B C
dates
2018-01-01 00:00:00 8.0 6.0 8.0
2018-01-02 00:00:00 9.0 1.0 0.0
2018-01-03 00:00:00 3.0 1.0 3.0
2018-01-04 00:00:00 4.0 7.0 6.0
2018-01-05 00:00:00 1.0 4.0 3.0
2018-01-06 00:00:00 3.0 7.0 6.0
2018-01-07 00:00:00 8.0 6.0 4.0
2018-01-08 00:00:00 4.0 7.0 0.0
2018-01-09 00:00:00 0.0 9.0 8.0
2018-01-10 00:00:00 8.0 4.0 8.0
的当前值。我这里没有使用随机种子,因此您的数据会与我的不同。
连续运行十次,你就会得到这个:
{{1}}
要从头开始,请继续删除df2.txt文件中第一行的所有行。
我希望这是你正在寻找的东西。如果没有,请告诉我。