>

날짜 시간별로 색인이 생성 된 데이터 프레임이 있습니다. 색인과 이전 행의 색인의 차이점에 따라 행을 필터링하고 싶습니다.

따라서 내 기준이 "이전 행보다 1 시간 이상 늦은 모든 행을 제거합니다"인 경우 아래 예에서 두 번째 행을 제거해야합니다.

2005-07-15 17:00:00  
2005-07-17 18:00:00 

다음 경우에는 두 행이 모두 유지됩니다 :

2005-07-17 23:00:00  
2005-07-18 00:00:00


  • 답변 # 1

    boolean indexing 가 필요한 것 같습니다   diff 와 함께  차이점과 1 hour Timedelta 와 비교 :

    dates=['2005-07-15 17:00:00','2005-07-17 18:00:00', '2005-07-17 19:00:00',  
          '2005-07-17 23:00:00', '2005-07-18 00:00:00']
    df = pd.DataFrame({'a':range(5)}, index=pd.to_datetime(dates))
    print (df)
                         a
    2005-07-15 17:00:00  0
    2005-07-17 18:00:00  1
    2005-07-17 19:00:00  2
    2005-07-17 23:00:00  3
    2005-07-18 00:00:00  4
    
    
    <시간>
    diff = df.index.to_series().diff().fillna(0)
    print (diff)
    2005-07-15 17:00:00   0 days 00:00:00
    2005-07-17 18:00:00   2 days 01:00:00
    2005-07-17 19:00:00   0 days 01:00:00
    2005-07-17 23:00:00   0 days 04:00:00
    2005-07-18 00:00:00   0 days 01:00:00
    dtype: timedelta64[ns]
    mask = diff <= pd.Timedelta(1, unit='h')
    print (mask)
    2005-07-15 17:00:00     True
    2005-07-17 18:00:00    False
    2005-07-17 19:00:00     True
    2005-07-17 23:00:00    False
    2005-07-18 00:00:00     True
    dtype: bool
    df = df[mask]
    print (df)
                         a
    2005-07-15 17:00:00  0
    2005-07-17 19:00:00  2
    2005-07-18 00:00:00  4
    
    

관련 자료

  • 이전 python - 하나의 열에서 두 개의 개별 열의 최소 및 최대를 요약하는 방법
  • 다음 sitecore 구성 파일에서 달러 기호는 무엇을 의미합니까?