我有一个数据帧df,结构如下:

        val          newidx    Code
Idx
0       1.0      1220121127    706
1       1.0      1220121030    706
2       1.0      1620120122    565

它有1000000条线路。
我们总共有600个独特的Code值和200000个独特的newidx值。
如果我执行以下操作
df.pivot_table(values='val', index='newidx', columns='Code', aggfunc='max')

我得到一个MemoryError。但这听起来很奇怪,因为生成的数据帧的大小应该是可持续的:20000x600。
这种操作需要多少内存?有办法修正这个记忆错误吗?

最佳答案

试着看看这是否符合你的记忆:

df.groupby(['newidx', 'Code'])['val'].max().unstack()

pivot_table不幸的是内存非常密集,因为它可能会生成多个数据副本。
如果groupby不起作用,则必须将数据帧分割成更小的部分。尽量不要分配多次。例如,如果从csv读取:
df = pd.read_csv('file.csv').groupby(['newidx', 'Code'])['val'].max().unstack()

避免多次分配。

08-28 08:01