2017-09-13 11 views
0

파이썬에는 이벤트 목록이 포함 된 테이블이있는 SQlite 데이터베이스가 있습니다.데이터 프레임의 새로운 행을 결정하십시오.

열 :

EventName 
StartDate 
EndDate 
DateAdded 

같은 이벤트가 여러 날 테이블에 추가 할 수 있습니다. 테이블은 하루에 한 번 새로 고쳐집니다.

오늘 날짜에 추가 된 이벤트와 이전 날짜에 추가 된 이벤트를 비교하여 새로운 이벤트가 있는지 매일 확인해야합니다.

나는 내가 이것을 달성하기 위해 SQL을 작성할 수 있습니다 가정 :

SQL 즉 사용하여 팬더 나 다른 데이터 구조없이 할 수있는 방법이 있다면 내가 궁금
SELECT e.EventName , 
     e.StartDate , 
     e.EndDate , 
     e.DateAdded 
FROM Events AS e 
WHERE e.DateAdded = '2017-09-13' 
     AND NOT EXISTS ( SELECT e2.EventName , 
           e2.StartDate , 
           e2.EndDate , 
           e2.DateAdded , 
           e2.EventName 
          FROM Events AS e2 
          WHERE e2.DateAdded < '2017-09-13' 
           AND e2.EventName = e.EventName 
        ); 

? 이유는 코드가 SQL 데이터를 여러 번 참조하며 데이터베이스를 한 번 쿼리 한 다음 해당 위치에서 데이터를 조작 할 수 있다면 자원 집약이 적을 것이라고 생각합니다.

샘플 데이터 : 2017년 9월 2일에서이 작업을 실행하면 내가 마지막 행을 반환 할

EventName Startdate EndDate  DateAdded 
Liverpool 2017-07-01 2017-07-10 2017-09-01 
Manchester 2017-08-01 2017-08-20 2017-09-01 
Liverpool 2017-07-01 2017-07-10 2017-09-02 
Manchester 2017-08-01 2017-08-20 2017-09-02 
London  2017-10-01 2017-10-10 2017-09-02 

:

당신이 팬더 DataFrame로 기존 SQL 테이블을 읽을 경우
London  2017-10-01 2017-10-10 2017-09-02 
+0

샘플 데이터와 예상 출력을 추가 할 수 있습니까? –

답변

1

df 및 새 레코드를 DataFrame new_df에 추가하려면 다음을 사용하여 이전 레코드에 새 레코드를 연결하십시오.

df = pd.concat([df, new_df]) 
,210

... 그리고 df.duplicated(keep=False)df의 모든 고유하지 않은 행을 신고 한 다음 인덱스 작업에 이러한 행을 부정 만 새로운 행에 df를 필터링 :

df = df[~df.duplicated(keep=False)] 

df 다음 고유 한 행만 포함됩니다

(즉 SQL 테이블에 새로 추가 된 행).

관련 문제