1

現在、次のコードで数字をロールアップしています。の要素ごとに、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())
4

1 に答える 1

1

currentGroupおそらく、関数のこの部分に大きな打撃を受けているでしょう:

attributionCalcDF['GROUP_LIST'].ix[idx]

それを一時変数に保存し、内部で一時変数を使用してみてくださいstartswith。ベクトル化された文字列関数をすぐに pandas に追加する予定なので、これらの場合にも大きな助けになるでしょう。

于 2012-06-29T14:10:32.430 に答える