Pandas: a matriz de mesclagem é muito grande, grande, como mesclar partes?
Ao tentar mesclar dois quadros de dados usando pandas, recebo esta mensagem: "ValueError: array é muito grande". Eu estimo que a tabela mesclada terá cerca de 5 bilhões de linhas, o que provavelmente é demais para o meu computador com 8 GB de RAM (isso é limitado apenas pela minha RAM ou está embutido no sistema pandas?).
Sei que, depois de ter a tabela mesclada, vou calcular uma nova coluna e filtrar as linhas, procurando os valores máximos dentro dos grupos. Portanto, a tabela final de saída terá apenas 2,5 milhões de linhas.
Como posso resolver esse problema para poder executar esse método de mesclagem em partes menores e criar a tabela de saída, sem atingir minhas limitações de RAM?
O método abaixo funciona corretamente para esses dados pequenos, mas falha nos dados reais maiores:
import pandas as pd
import numpy as np
# Create input tables
t1 = {'scenario':[0,0,1,1],
'letter':['a','b']*2,
'number1':[10,50,20,30]}
t2 = {'letter':['a','a','b','b'],
'number2':[2,5,4,7]}
table1 = pd.DataFrame(t1)
table2 = pd.DataFrame(t2)
# Merge the two, create the new column. This causes "...array is too big."
table3 = pd.merge(table1,table2,on='letter')
table3['calc'] = table3['number1']*table3['number2']
# Filter, bringing back the rows where 'calc' is maximum per scenario+letter
table3 = table3.loc[table3.groupby(['scenario','letter'])['calc'].idxmax()]
Esta é uma continuação de duas perguntas anteriores:
Isso tem problemas de desempenho?
Qual é uma boa maneira de evitar o uso de linhas neste exemplo?
Eu respondo meu próprio Q abaixo.