2015-07-15 2 views
0
# Incorporate delisting return 
i = 0 
for tc, col in dlret.iloc[:,0:50].iteritems(): 
    idx = col.index[col.notnull()] 
    if len(idx) != 0: 
     tr = idx[0] 
     val = col.ix[tr] 
     #ret.ix[tr, tc] = val #this line is too slow 
    i += 1 
    if math.floor(i/10) > math.floor((i-1)/10): 
     print i 

dlret DataFrame имеет примерно 600 строк и 25000+ столбцов. Я перебираю столбцы, чтобы искать первое значение nonnull (возврат исключений), а затем найдите соответствующее местоположение в ret DataFrame, чтобы установить значение, равное значению возвращаемого делистинга. Тем не менее, код работает очень медленно, используя ix для индексации соответствующего местоположения. Любое предложение о том, как эффективно достичь этого?Как эффективно изменить значения в кадрах данных

+0

Любое сродство к рамке данных панд. Если нет, то посмотрите на массивы numpy. Они быстрые – Versatile

+0

Я думаю, что простая функция 'comb' или' update' может решить вашу проблему здесь. Не могли бы вы загрузить образец вашего набора данных через Dropbox sharelink или google driver? Если данные являются собственностью, замените их на случайные числа. –

ответ

1

В соответствии с вашим комментарием, что вы хотите, выполните итерации по столбцам для поиска первого ненулевого значения для каждого столбца и обновления ret DataFrame. Вы можете сделать это по следующему коду:

mask_first_nonnull = dlret.notnull() & (dlret.notnull().cumsum()==1) 
ret[mask_first_nonnull]=dlret[mask_first_nonnull] 
+0

извините за путаницу. То, что я имел в виду, было первым ненужным значением. Спасибо за Ваш ответ! Кроме того, я хочу обновить Ret Dataframe, используя данные dlret Dataframe, а не наоборот. – zsljulius

Смежные вопросы