나는 시작 날짜 시간 (타임 스탬프)과 선택적인 끝 날짜 시간 (취소 된 경우)이있는 가입의 팬더 데이터 프레임을 가지고 있습니다.날짜 범위가있는 DataFrame에서 팬더 일일 집계 시간 시리즈 만들기
간단히하기 위해 시작 및 종료 날짜 시간 (타임 스탬프)을 기준으로 날짜 (예 : "20170901")의 문자열 열을 만들었습니다. 그것은 다음과 같습니다
df = pd.DataFrame([('20170511', None), ('20170514', '20170613'), ('20170901', None), ...], columns=["sd", "ed"])
최종 결과는 많은 구독 범위에서 주어진 날짜에 활성 얼마나의 시계열해야합니다. 이를 위해
, 나는 범위 내에서 모든 일에 대한 색인을 생성 :days = df.groupby(["sd"])["sd"].count()
df
. 내가 원래 데이터 집합의 매일의 값을, 그래서 틈이없는
count_by_day = pd.DataFrame([ len(df.loc[(df.sd <= i) & (df.ed.isnull() | (df.ed > i))]) for i in days.index], index=days.index)
참고. 기간을 늘릴 수 있다고 확신합니다.
실제 질문은 : 수천 개의 행이있는 큰 초기 데이터 세트 df에 대해이를 효율적으로 계산할 수 있습니까? 내가 사용한 방법은 복잡성이 2 차적 인 것 같습니다. 또한 df.query()를 시도했지만 Pythonic 필터보다 66 % 느리고 복잡도는 변하지 않습니다.
예를 들어 팬더 문서를 검색하려고했지만 잘못된 키워드를 사용하고있는 것으로 보입니다. 어떤 아이디어?
감사합니다 ! 코드 패턴 중 일부는 내 질문에있는 코드보다 훨씬 훌륭합니다. – mike921