我有类似的问题要链接。
那里的解决方案似乎不适用于我的特定情况。我认为这是因为数据框的大小。
我有一个大小为 (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
我不遗余力地消除重复的值。有解决办法吗?
谢谢。