날짜별 시간대별 카운트
조회수 390회
날짜별 시간이 찍힌 자료가 있습니다. 날짜별 시간별 자료로 변환하고 싶습니다! 도와주세요.
<기본 자료 예시>
<원하는 결과물>
- 날짜별 그룹화
- 날짜별 시간대별 그룹화
- 날짜별 시간대별 개수
if문을 써서 하고 싶은데 도무지 감이 안오네요.
-
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
태그에 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
댓글 입력