我想將一組列s_cols
與其他兩列b
,c
相乘。在熊貓中高效地乘以列
到目前爲止,我在做
s_cols = ['t070101', 't070102', 't070103', 't070104', 't070105', 't070199', 't070201', 't070299']
dfNew = df[s_cols]*df[`c`]*df[`b`]
但這一次吸引所有的16GB的內存了我的系統,墜毀我的OSX - 該表有148000
行。
我該怎麼做呢?我猜應用row-wise需要較少的活動內存,但它似乎比矢量化操作低效。
表:
b TELFS t070101 t070102 t070103 t070104 \
TUCASEID
20030100013280 8155462.672158 2 0 0 0 0
20030100013344 1735322.527819 1 0 0 0 0
20030100013352 3830527.482672 2 60 0 0 0
20030100013848 6622022.995205 4 0 0 0 0
20030100014165 3068387.344956 1 0 0 0 0
t070105 t070199 t070201 t070299 \
TUCASEID
20030100013280 0 0 0 0
20030100013344 0 0 0 0
20030100013352 0 0 0 0
20030100013848 0 0 0 0
20030100014165 0 0 0
c
TUCASEID
20030100013280 31
20030100013344 31
20030100013352 31
20030100013848 31
20030100014165 31
UPDATE
這個問題好像是用df[s_cols]
。單個列的乘法立即發生,但已經乘以df[['t070101', 't070102']]
的時間足夠長,以至於我害怕系統再次崩潰並搶先關閉Python進程。
如果您將操作分成兩步,它會成功嗎?所以't = df ['c'] * df ['b'] dfNew = df [s_cols] * t' – EdChum 2015-03-02 21:56:30
說實話我不期望上面有什麼不同,你是哪個版本的numpy和pandas使用? – EdChum 2015-03-02 21:58:32
@EdChum:'1.9.1'和'0.15.0'。是的,以上是沒有什麼不同。 – FooBar 2015-03-02 22:01:19