날짜별 시간대별 카운트

조회수 65회

날짜별 시간이 찍힌 자료가 있습니다. 날짜별 시간별 자료로 변환하고 싶습니다! 도와주세요.

<기본 자료 예시>

이미지

<원하는 결과물>

  1. 날짜별 그룹화
  2. 날짜별 시간대별 그룹화
  3. 날짜별 시간대별 개수

if문을 써서 하고 싶은데 도무지 감이 안오네요.

이미지


2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    태그에 MySQL이 있길래 MySQL 버전을 올려 드립니다.

    IF로 접근하면 답이 없을 수밖에 없어요 왜냐면 이런 문제는 모든 자료에 대해 일관되게 적용 가능한 규칙을 찾아서 일괄 적용해줘야 풀리는 문제거든요.

    -- tbl1 테이블에 id, created_at 컬럼이 있다고 가정하겠습니다.
    SELECT
        concat(
            s.d, ':00~', -- 4. 예컨대 s.d === 2022-07-22 12:00이라면?
            DATE_FORMAT(DATE_ADD(concat(s.d, ':00:00'), INTERVAL 1 HOUR), '%H:00') -- 5. 거기에 1시간을 더한 date를 얻어서 "13:00" 형태로 변환한 다음 s.d 뒤에 붙여줘야 합니다.
        ) AS '원하는 결과물',
        s.c AS 'count'
    FROM (
        SELECT
            DATE_FORMAT(t.created_at, '%Y-%m-%d %H') AS d, -- 3. 출력 및 추가 포맷팅을 위해 그룹된 값들을 선택해 줍니다.
            count(t.id) AS c -- 2. 집계합니다.
        FROM tbl1 t
        GROUP BY DATE_FORMAT(t.created_at, '%Y-%m-%d %H') -- 1. 일단 연-월-일 시작시 기준으로 그루핑합니다.
    ) s;
    
  • >>> import pandas as pd
    >>> from io import StringIO
    >>> dat = '''시간
    2021-01-31 21:45:03
    2021-01-31 20:41:27
    2021-01-31 20:20:55
    2021-01-31 20:01:59
    2021-01-31 19:45:03
    2021-01-31 19:12:49
    2021-01-31 18:40:24
    2021-01-31 18:22:34'''
    >>> df = pd.read_csv(StringIO(dat))
    
    
    >>> df
                        시간
    0  2021-01-31 21:45:03
    1  2021-01-31 20:41:27
    2  2021-01-31 20:20:55
    3  2021-01-31 20:01:59
    4  2021-01-31 19:45:03
    5  2021-01-31 19:12:49
    6  2021-01-31 18:40:24
    7  2021-01-31 18:22:34
    
    
    >>> df.resample("H", on="시간").count()
    Traceback (most recent call last):
      File "<pyshell#22>", line 1, in <module>
        df.resample("H", on="시간").count()
      File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\core\frame.py", line 10350, in resample
        return super().resample(
      File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\core\generic.py", line 8126, in resample
        return get_resampler(
      File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\core\resample.py", line 1382, in get_resampler
        return tg._get_resampler(obj, kind=kind)
      File "C:\PROGRAMS\Python3864\lib\site-packages\pandas\core\resample.py", line 1558, in _get_resampler
        raise TypeError(
    TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'
    
    
    >>> df["시간"] = pd.to_datetime(df["시간"])
    >>> df.info()
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 8 entries, 0 to 7
    Data columns (total 1 columns):
     #   Column  Non-Null Count  Dtype         
    ---  ------  --------------  -----         
     0   시간      8 non-null      datetime64[ns]
    dtypes: datetime64[ns](1)
    memory usage: 192.0 bytes
    
    
    >>> df.resample("H", on="시간").count()
                         시간
    시간                     
    2021-01-31 18:00:00   2
    2021-01-31 19:00:00   2
    2021-01-31 20:00:00   3
    2021-01-31 21:00:00   1
    

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.