次のコードは私が望むことを行うはずですが、ループで20%完了するまでに10GBのRAMが必要です。
# In [4]: type(pd)
# Out[4]: pandas.sparse.frame.SparseDataFrame
memid = unique(pd.Member)
pan = {}
for mem in memid:
pan[mem] = pd[pd.Member==mem]
goal = pandas.Panel(pan)
ここで GitHub の問題を作成しました。
https://github.com/wesm/pandas/issues/663
NumPy ndarray ビュー間の循環参照がメモリ リークを引き起こしていることを確認したと確信しています。修正をコミットしました:
https://github.com/wesm/pandas/commit/4c3916310a86c3e4dab6d30858a984a6f4a64103
ソースからインストールして、問題が解決するかどうか教えてもらえますか?
ところで、Panel の代わりに SparsePanel を使用してみてください。これは、Panel がすべてのサブ DataFrame を密な形式に変換するためです。
最後に、SparseDataFrame を分割する代わりに、groupby を使用することを検討してO(N * M)
ください。それはさらに短いです:
pan = dict(pd.groupby('Member'))