【问题标题】:How to add 1 min ohlc data generated to be grouped to historical data sequentially如何将生成的 1 分钟 ohlc 数据添加到按顺序分组到历史数据中
【发布时间】:2021-10-05 08:31:54
【问题描述】:

我已经生成了 2 分钟的脚本历史数据和 1 分钟的净值报价的 ohlc 数据。 但是我对合并这两个数据框感到震惊,因为我希望将 1 分钟的 ohlc 数据聚合到需要按顺序合并到历史数据中。

历史数据输出

                      date    open    high     low   close   fast_ema   slow_ema  slow_sma
0     2021-06-03 22:52:00  5071.0  5071.0  5071.0  5071.0        NaN        NaN       NaN
1     2021-06-03 22:54:00  5071.0  5071.0  5071.0  5071.0        NaN        NaN       NaN
2     2021-06-03 22:56:00  5071.0  5071.0  5071.0  5071.0        NaN        NaN       NaN
3     2021-06-03 22:58:00  5071.0  5071.0  5071.0  5071.0        NaN        NaN       NaN
...                   ...     ...     ...     ...     ...        ...        ...       ...
13920 2021-07-29 21:22:00  5453.0  5453.0  5450.0  5450.0  5448.7956  5443.4555   5425.56
13921 2021-07-29 21:24:00  5450.0  5452.0  5449.0  5451.0  5449.2365  5444.1414   5426.07
13922 2021-07-29 21:26:00  5450.0  5454.0  5450.0  5453.0  5449.9892  5444.9467   5426.57
13923 2021-07-29 21:28:00  5453.0  5453.0  5450.0  5450.0  5449.9914  5445.4061   5427.08
13924 2021-07-29 21:30:00  5453.0  5454.0  5450.0  5452.0  5450.3931  5446.0056   5427.55

[13924 rows x 8 columns]  

让我们说它的代码为:df3=pd.DataFrame(data)

i min 蜡烛的输出,ohlc 数据

{
    58375943: {
        datetime.datetime(2021, 7, 29, 21, 43): {'high': 5451.0, 'low': 5450.0, 'open': 5450.0, 'close': 5451.0},
        datetime.datetime(2021, 7, 29, 21, 44): {'high': 5451.0, 'low': 5451.0, 'open': 5451.0, 'close': 5451.0}
    }
}

让我们说它的代码为:df = pd.DataFrame(candle,index=[0])

我想合并这两个数据,以便在 df = pd.DataFrame(candle,index=[0]) 中生成的每 1 分钟数据需要通过迭代索引计数添加到 df3=pd.DataFrame(data) IE; [13924 行 x 8 列] 每个 df 行 13924 行 +1 依此类推。

我的代码如下。但它只从每个 imin 时间帧生成 df 中的行,并且与 df3 数据帧的第一个索引相同的合并,并且每分钟替换同一行而不是添加行。

代码如下

df = pd.DataFrame(candle,index=[0])
df.drop(df.columns[[0,6]], axis = 1, inplace = True)
df.rename(columns = {'Time':'date'}, inplace = True)
print("data: \n",df)
global rows
dfs = []
for row in df.iterrows():
    df_cols = ['date','open','high','low','close']
    d = pd.DataFrame(df,columns=df_cols,index=[])
    dfs.append(df)
print(dfs)
df1 = pd.concat(dfs, ignore_index=True)
df2 = pd.concat([df1,df3])
print ("Final dataframe: \n",df2)     

输出最终数据帧:

决赛:

                      date    open    high     low   close   fast_ema   slow_ema  slow_sma
0     2021-07-29 21:42:00  5450.0  5450.0  5448.0  5449.0        NaN        NaN       NaN
0     2021-06-03 22:52:00  5071.0  5071.0  5071.0  5071.0        NaN        NaN       NaN
1     2021-06-03 22:54:00  5071.0  5071.0  5071.0  5071.0        NaN        NaN       NaN
2     2021-06-03 22:56:00  5071.0  5071.0  5071.0  5071.0        NaN        NaN       NaN
3     2021-06-03 22:58:00  5071.0  5071.0  5071.0  5071.0        NaN        NaN       NaN
...                   ...     ...     ...     ...     ...        ...        ...       ...
13920 2021-07-29 21:22:00  5453.0  5453.0  5450.0  5450.0  5448.7956  5443.4555   5425.56
13921 2021-07-29 21:24:00  5450.0  5452.0  5449.0  5451.0  5449.2365  5444.1414   5426.07
13922 2021-07-29 21:26:00  5450.0  5454.0  5450.0  5453.0  5449.9892  5444.9467   5426.57
13923 2021-07-29 21:28:00  5453.0  5453.0  5450.0  5450.0  5449.9914  5445.4061   5427.08
13924 2021-07-29 21:30:00  5453.0  5454.0  5450.0  5452.0  5450.3931  5446.0056   5427.55

[13926 rows x 8 columns] 

如何解决这个问题。请帮忙?

【问题讨论】:

  • 感谢 Andrej 以首选格式编辑帖子
  • 有人帮帮我吗?
  • 我不清楚您希望如何组合数据帧。是否要将 1 分钟数据添加到 2 分钟数据?您希望将 1 分钟数据重新采样为 2 分钟数据吗?你想让它们交错在数据框中,按时间排序吗?作为一个具体的例子,请从两个原始数据帧(作为数据帧)中的每一个中给出四或五行实际数据,然后显示准确地你想要什么那些相同的四五行在最终数据框中查看。这应该有助于我澄清您要完成的工作。
  • @Daniel Sir 我想合并 2 个数据框。第一个数据框由到目前为止 2 个月的原油历史数据组成,例如 df3,并通过函数的返回值作为“数据”将数据获取到该 df3,df3 的输出显示为上面历史数据的输出。另一个 datframe 存储从现在开始生成的 1 分钟数据,我将其命名为 df,其中包含逐个滴答生成的 1 分钟数据的 ohlc 值。我希望这个 df 数据与 df3 合并,并从 df3 的最后一个索引行(即从 13924 行)依次添加索引

标签: python pandas dataframe time-series candlestick-chart


【解决方案1】:

如果我理解你的问题,你有一个数据框,称之为 df0,看起来像这样:

                  Date    Open    High     Low   Close
0  2021-07-29 21:12:00  5453.0  5453.0  5450.0  5450.0
1  2021-07-29 21:14:00  5450.0  5452.0  5449.0  5451.0
2  2021-07-29 21:16:00  5450.0  5454.0  5450.0  5453.0
3  2021-07-29 21:18:00  5453.0  5453.0  5450.0  5450.0
4  2021-07-29 21:20:00  5453.0  5454.0  5450.0  5452.0
5  2021-07-29 21:22:00  5453.0  5453.0  5450.0  5450.0
6  2021-07-29 21:24:00  5450.0  5452.0  5449.0  5451.0
7  2021-07-29 21:26:00  5450.0  5454.0  5450.0  5453.0
8  2021-07-29 21:28:00  5453.0  5453.0  5450.0  5450.0
9  2021-07-29 21:30:00  5453.0  5454.0  5450.0  5452.0

还有另一个数据框,称为 df1,看起来像这样:

                  Date    Open    High     Low   Close
0  2021-07-29 21:40:00  5453.0  5454.0  5450.0  5452.0
1  2021-07-29 21:41:00  5453.0  5453.0  5450.0  5450.0
2  2021-07-29 21:42:00  5450.0  5452.0  5449.0  5451.0
3  2021-07-29 21:43:00  5450.0  5454.0  5450.0  5453.0
4  2021-07-29 21:44:00  5453.0  5453.0  5450.0  5450.0
5  2021-07-29 21:45:00  5453.0  5454.0  5450.0  5452.0
6  2021-07-29 21:46:00  5453.0  5453.0  5450.0  5450.0
7  2021-07-29 21:47:00  5450.0  5452.0  5449.0  5451.0
8  2021-07-29 21:48:00  5450.0  5454.0  5450.0  5453.0
9  2021-07-29 21:49:00  5453.0  5453.0  5450.0  5450.0

如果您想要一个新的数据框,请将其命名为 dfnew,如下所示:

                   Date    Open    High     Low   Close
0   2021-07-29 21:12:00  5453.0  5453.0  5450.0  5450.0
1   2021-07-29 21:14:00  5450.0  5452.0  5449.0  5451.0
2   2021-07-29 21:16:00  5450.0  5454.0  5450.0  5453.0
3   2021-07-29 21:18:00  5453.0  5453.0  5450.0  5450.0
4   2021-07-29 21:20:00  5453.0  5454.0  5450.0  5452.0
5   2021-07-29 21:22:00  5453.0  5453.0  5450.0  5450.0
6   2021-07-29 21:24:00  5450.0  5452.0  5449.0  5451.0
7   2021-07-29 21:26:00  5450.0  5454.0  5450.0  5453.0
8   2021-07-29 21:28:00  5453.0  5453.0  5450.0  5450.0
9   2021-07-29 21:30:00  5453.0  5454.0  5450.0  5452.0
10  2021-07-29 21:40:00  5453.0  5454.0  5450.0  5452.0
11  2021-07-29 21:41:00  5453.0  5453.0  5450.0  5450.0
12  2021-07-29 21:42:00  5450.0  5452.0  5449.0  5451.0
13  2021-07-29 21:43:00  5450.0  5454.0  5450.0  5453.0
14  2021-07-29 21:44:00  5453.0  5453.0  5450.0  5450.0
15  2021-07-29 21:45:00  5453.0  5454.0  5450.0  5452.0
16  2021-07-29 21:46:00  5453.0  5453.0  5450.0  5450.0
17  2021-07-29 21:47:00  5450.0  5452.0  5449.0  5451.0
18  2021-07-29 21:48:00  5450.0  5454.0  5450.0  5453.0
19  2021-07-29 21:49:00  5453.0  5453.0  5450.0  5450.0

如果这不是您要问的问题,请告诉我。


如果这你想要完成的,你可以这样做:

dfnew = pd.concat([df0,df1])
dfnew.reset_index(inplace=True,drop=True)

【讨论】:

  • @AnandtsKerala 关于您的评论(“但 df1 数据是连续民意调查数据......”)我的道歉;我很难理解你对问题的描述。帮助我理解的最好方法是向我展示(正如我上面所做的那样)df0df1 的外观,以及您希望 dfnew 的外观,在连续轮询的每个步骤中过程,至少在轮询的前 4 个步骤中。 这意味着请告诉我这三个(df0df1dfnew)在前 4 个步骤中的样子轮询过程中的步骤。
  • df0(将仅轮询一次):0 2021-07-29 21:14:00 5450.0 5452.0 5449.0 5451.0 df1(每分钟的即时数据:)。1 分钟后,将再次使用索引轮询 df1 0.0 5450.0 5450.0 5452.0 5452.0 5452.0 5452.0 5452.0 5452.0 5453.0 5453.0 5453.0 5450.0 5450.0 5450.0 5450.0 2 2021 -07-29 21:16:00 5458.0 5459.0 5443.0 5455.0 3 2021-07-29 21:16:00 df1
  • 澄清一下,一分钟后df1 将如下所示: 0 2021-07-29 21:15:00 5453.0 5453.0 5450.0 5450.0 两分钟后,df1 会有一两行吗?它看起来像案例 A:0 2021-07-29 21:16:00 5458.0 5459.0 5443.0 5455.0 还是看起来像案例 B:0 2021-07-29 21:15:00 5453.0 5453.0 5450.0 5450.0 1 2021-07-29 21:16:00 5458.0 5459.0 5443.0 5455.0 ??
  • 先生,谢谢您的回复。两分钟后,我在 df1 中只得到一行,即; CASE-A,尽管我创建 df1 的 1 分钟蜡烛数据有 2 行,时间按分钟递增。
猜你喜欢
  • 1970-01-01
  • 2022-10-23
  • 2018-06-30
  • 2018-12-05
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
相关资源
最近更新 更多