1
我想在名爲result
的現有DataFrame
中創建一個名爲str_bos
的列。我有以下專欄 - 'str_nbr', 'ZIP Sales', 'str_Sales', 'ZIP_Distinct #', 'ZIP_Share_of_Str_Sales', 'Counter', 'Str_BOS_Cum%', 'Str_Sales_Rank'
。在DataFrame中添加計算字段
這是我想出來的。但是,需要2個小時才能完成。但是,其他操作(如排序,合併等)需要幾秒鐘的時間。我在這裏錯過了什麼?
def str_bos(row):
if row['str_sales_rank'] == 1 or row['str_bos_cum%'] <= 0.1:
return 1
elif row['str_bos_cum%'] <= 0.2:
return 2
elif row['str_bos_cum%'] <= 0.3:
return 3
elif row['str_bos_cum%'] <= 0.4:
return 4
elif row['str_bos_cum%'] <= 0.5:
return 5
elif row['str_bos_cum%'] <= 0.6:
return 6
elif row['str_bos_cum%'] <= 0.7:
return 7
elif row['str_bos_cum%'] <= 0.8:
return 8
elif row['str_bos_cum%'] <= 0.9:
return 9
else:
return 10
result['str_bos'] = result.apply(lambda row: str_bos(row), axis=1)
原因你的代碼是緩慢的是,在每一行的'.apply'方法迭代,而量化的方法做計算的整列立刻。在熊貓中,你需要避免迭代行 - 它幾乎保證有可怕的表現。這個博客有一個很好的解釋(迭代,應用和向量化部分):https://tomaugspurger.github.io/modern-4-performance.html – DataSwede