我对Python相当陌生,我正试图在一个非常重的文件(大约19500000行,30列)上使用crosstab函数。在
下面是我要做的示例:
这是我的数据,减去1950万行和30列
>>> df
COMMUNE DCRAN IPONDI ACHLR
1 01001 01001 3.901356 3
2 01001 01001 3.901356 3
3 01001 01001 3.901356 5
4 01001 01001 3.901356 4
5 01001 01001 3.901356 4
6 01001 01001 3.901356 5
7 01002 01001 3.901356 1
8 01002 01001 3.901356 4
9 01002 01001 3.901356 4
10 01002 01001 3.901356 4
这就是我预期的结果:
^{pr2}$我已经能够使它工作500000行,但当我对整个文件执行此操作时,它崩溃了。我想我的方法在内存方面不是最有效的,我可以使用其他函数或者更好地使用交叉表来解决这个问题,但是我被卡住了。在
基本上,在使用pandas中的crosstab函数聚合行之前,我已经融化了数据帧,试图重现我在R上所做的事情。 与R相反,我可以融化整个文件(这会造成行数的减少),但当我执行交叉表函数时,它会崩溃。在
^{3}$有没有一种方法可以更有效地利用内存,比如跳过第一步? 我想了些什么
df = pd.crosstab([df.COMMUNE, df.DCRAN, df.IPONDI], df.ACHLR)
df
ACHLR 1 3 4 5
COMMUNE DCRAN IPONDI
01001 01001 3.901356 0 2 2 2
01002 01001 3.901356 1 0 3 0
但如果我添加的变量不仅仅是“ACHLR”(例如“AGEMEN8”),它将返回:
ACHLR 1 3 4 5
AGEMEN8 25 40 55 65 25 40 55 65 25 40 55 65 25 40 55 65
COMMUNE DCRAN IPONDI
01001 01001 3.901356 0 0 0 0 0 0 2 0 0 2 0 0 1 0 0 1
01002 01001 3.901356 1 0 0 0 0 0 0 0 0 3 0 0 1 0 0 1
你有什么建议来解决这个问题?在
[更新]
我试过约翰的建议,但没起到显著的作用。在
此外,我还比较了直接做交叉表的时间,以及在2000000条线上熔化然后交叉条的时间,第二个要快得多。在
目前没有回答
相关问题 更多 >
编程相关推荐