: 내가 쓴파이썬 팬더 : 벡터화 된 시계열 윈도우 함수 나는 다음과 같은 형식의 팬더 dataframe이
'customer_id','transaction_dt','product','price','units'
1,2004-01-02,thing1,25,47
1,2004-01-17,thing2,150,8
2,2004-01-29,thing2,150,25
3,2017-07-15,thing3,55,17
3,2016-05-12,thing3,55,47
4,2012-02-23,thing2,150,22
4,2009-10-10,thing1,25,12
4,2014-04-04,thing2,150,2
5,2008-07-09,thing2,150,43
을 30 일 개 창을 나타내는 두 개의 새로운 필드를 만들려면 다음
import numpy as np
import pandas as pd
start_date_period = pd.period_range('2004-01-01', '12-31-2017', freq='30D')
end_date_period = pd.period_range('2004-01-30', '12-31-2017', freq='30D')
def find_window_start_date(x):
window_start_date_idx = np.argmax(x < start_date_period.end_time)
return start_date_period[window_start_date_idx]
df['window_start_dt'] = df['transaction_dt'].apply(find_window_start_date)
def find_window_end_date(x):
window_end_date_idx = np.argmin(x > end_date_period.start_time)
return end_date_period[window_end_date_idx]
df['window_end_dt'] = df['transaction_dt'].apply(find_window_end_date)
을 불행히도 이것은 응용 프로그램에 행렬 방식으로 적용하는 것은 너무 느립니다. 가능한 경우 이러한 기능을 벡터 라이 제이션하는 데 대한 모든 정보를 매우 감사하겠습니다.
편집 :
'customer_id','transaction_dt','product','price','units','window_start_dt','window_end_dt'
그것은 다시 샘플링하거나 형식적인 의미에서, 윈도우를 할 필요가 없습니다 : 결과의 dataframe이 레이아웃을 가지고 있어야
. 'window_start_dt'및 'window_end_dt'열을 추가하면됩니다. 현재 코드가 작동하면 가능한 경우 벡터화해야합니다.
확인하기 만하면 30 일짜리 창에 속하는 마지막 날짜 (데이터에 나타나는 날짜) 만 추출하려는 것입니까? –
@AntoineZambelli 나는 당신이 무엇을 의미하는지 생각합니다. 사실 groupby 작업을 추가로 수행 할 필요가 없으므로 Windows에서 처음/마지막 날짜를 선택할 필요가 없습니다. 기존 행에 적용하기 만하면됩니다. 내가 오해하면 사과드립니다. – Pylander
좋아, 잘하면 나는 그것을 올바르게 이해하고, 나는 당신이'resample'을 원한다고 생각한다! –