0

我有类似的问题要链接

那里的解决方案似乎不适用于我的特定情况。我认为这是因为数据框的大小。

我有一个大小为 (2,018,901 - 6) 的 df 和一个长度为 2,083,656 的列表。该列表的目的(如上面的链接)是在原始 df 中插入缺失的时隙。

我尝试了链接的公认解决方案,但程序一直在无休止地运行。第二种解决方案,即

 df.merge(how='right', on='A', right = pd.DataFrame({'A':my_list})).sort(columns='A').reset_index().drop(['index'], axis=1)

引发此错误:

***MemoryError:

为了给出我的问题的一些背景,我将市场清算价格存储在 df 中。对于每个时间段 (ts) -1 每小时 - 有 24 个未平仓交易时段,对应于接下来的 24 小时。在某些 ts 上,市场可能不清楚,因此我有差距。

例如,假设当前是 ts 1。此时,接下来的 24 个 ts 是打开的(从 ts 2 到 ts 25)。在当前 ts 2 时,打开的 ts 将是从 3 到 26,依此类推。因此,在数据中,每个 ts 都有一行(顺便说一句,也重复了 ts)。当在某些 ts 没有清除时,数据会出现跳跃。

我想填补空白

my_list

这是因为我正在使用其他来源进一步处理数据,并且在任何 ts 中都没有间隙。

这是一段df:

       A     1     2 bin bin_t1  bin_dum
89 381.0   0.6 153.8  11      7      7.0
90 382.0   0.5  59.4   7      7      7.0
91 383.0   0.5  53.4   7      6      6.0
92 384.0   0.4  45.9   6      6      6.0
93 385.0   0.4  46.5   6      6      6.0
94 386.0   0.3  45.4   6      6      6.0
95 387.0 740.8  34.1   6      5      5.0
96 365.0   0.1   2.4   5      5      5.0
97 366.0   0.1   0.5   5      6      6.0
98 388.0 732.8  38.5   6      5      5.0
99 366.0   1.7   2.7   5      5      5.0

A 列代表打开的 ts。从第 97 行跳转到第 98 行,即从 366 到 388。所以在 my_list 中,我有完整的序列,在这种情况下缺少 ts

367 368 369 370 ... 387

这个想法是通过完成损坏的序列来使 df 更大,并用零填充其余的列。

除了上一行代码之外,我尝试过的是

df.set_index('A')
new_index = pd.Index(my_list, name='A')
df.set_index('A').reindex(new_index)
df.set_index('A').reindex(new_index).reset_index()

这种方法一直在运行。
df 和 my_list 的形状分别是

[2018901 rows x 6 columns]
[1 row x 2083656 columns]

我该如何处理?

谢谢

编辑

初始数据来自多个文件。为了消除对大小的怀疑,我尝试在由单个文件组成的数据框中执行前面提到的解决方案。

现在我收到此错误,类似于case

*** ValueError: cannot reindex from a duplicate axis

我不遗余力地消除重复的值。有解决办法吗?

谢谢。

4

0 回答 0