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 시간이 걸립니다. 그러나 다른 작업 (정렬, 병합 등)은 몇 초가 걸립니다. 여기서 내가 놓친 게 뭐야? 여기 cut() 방법을 사용하는 것
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