在带有重复索引的pandas数据框中插入缺少的字段

时间:2017-07-27 10:37:33

标签: python pandas duplicates missing-data timeslots

我遇到与link类似的问题。

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

我有一个大小的df(2,018,901 - 6)和一个长度为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小时。在某些方面,市场可能不清楚,因此我有一个差距。

例如,让我们说它当前是1.在这个时间点,接下来的24 ts是开放的(从ts 2到ts 25)。在当前的ts 2,开放的ts将是3到26,依此类推。所以在数据中我每个ts都有一行(顺便说一下,也重复了ts)。当某些ts没有清算时,数据就会跳跃。

我想用

填补空白
my_list

这是因为我正在与其他来源进一步处理数据,而且没有任何差距。

这是一段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

我无法消除重复的价值。有工作吗?

感谢。

0 个答案:

没有答案