2012-06-28 2 views
1

В настоящее время я просматриваю номера со следующим кодом. Для каждого элемента в dataframe я устанавливаю несколько условий, для которых можно суммировать, но это самая медленная часть созданного отчета. Есть ли более быстрый способ идентифицировать все элементы в кадре данных, которые начинаются с определенной строки?Найти все элементы в столбце dataframe, который начинается с строки

for idx, eachRecord in attributionCalcDF.T.iteritems():   
    if (attributionCalcDF['SEC_ID'].ix[idx] == 0): 

     currentGroup = lambda x: str(x).startswith(attributionCalcDF['GROUP_LIST'].ix[idx]) 
     currentGroupArray = attributionCalcDF['GROUP_LIST'].map(currentGroup) 

     attributionCalcDF['ROLLUP_DAILY_TIMING_IMPACT'].ix[idx] = (
                 attributionCalcDF['DAILY_TIMING_IMPACT'][(attributionCalcDF['SEC_ID'] != 0) & 
                 (currentGroupArray) & 
                 (attributionCalcDF['START_DATE'] == attributionCalcDF['START_DATE'].ix[idx])].sum()) 

     attributionCalcDF['ROLLUP_DAILY_STOCK_TO_GROUP_IMPACT'].ix[idx] = (
                 attributionCalcDF['DAILY_STOCK_TO_GROUP_IMPACT'][(attributionCalcDF['SEC_ID'] != 0) & 
                 (currentGroupArray) & 
                 (attributionCalcDF['START_DATE'] == attributionCalcDF['START_DATE'].ix[idx])].sum()) 

ответ

1

Вы, вероятно, будучи ударил по этой части функции currentGroup:

attributionCalcDF['GROUP_LIST'].ix[idx] 

Попробуйте сохранить, что во временную переменную и использовать переменную внутри временную startswith. Я планирую скоро добавить векторизованные строковые функции в панды, так что это будет большой помощью и в этих случаях.

+0

Большое спасибо Уэсу. Улучшено время этой функции на ~ 40%. Векторизованные функции строк? ... очень с нетерпением жду этого! –

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