반응형
데이터프레임에서 두 datetime 행의 차, 즉 시간의 차이를 구하고 싶은 경우 여러가지 방법이 있다. 시간의 차이를 시, 분, 초로 나타내거나 날짜를 구할 수도 있다. 다양한 경우에 대해 알아보자.
공식 문서 https://pandas.pydata.org/docs/reference/api/pandas.Series.dt.html
https://pandas.pydata.org/docs/reference/api/pandas.Timedelta.html
설정
날짜 차이를 계산하고자 하는 행들의 dtype이 datetime이어야 함을 주의한다.
만약 object type이라면 pandas.to_datetime을 사용하여 datetime type으로 변경해준다.
import pandas as pd
df = pd.DataFrame(
{'from_date': pd.date_range(start='2023-08-01', end='2023-08-02', freq='3H'),
'to_date': pd.date_range(start='2023-08-01 12:00:00', end='2023-08-03 12:00:00', freq='6H')}
)
계산 예시
차이 구하기
df.to_date - df.from_date
또는
df.to_date.sub(df.from_date)
output >>>
0 0 days 12:00:00
1 0 days 15:00:00
2 0 days 18:00:00
3 0 days 21:00:00
4 1 days 00:00:00
5 1 days 03:00:00
6 1 days 06:00:00
7 1 days 09:00:00
8 1 days 12:00:00
dtype: timedelta64[ns]
시간 차이 구하기
(df.to_date - df.from_date) / pd.Timedelta(hours=1)
또는
(df.to_date - df.from_date).dt.total_seconds() / 60 / 60
output >>>
0 12.0
1 15.0
2 18.0
3 21.0
4 24.0
5 27.0
6 30.0
7 33.0
8 36.0
dtype: float64
분 차이 구하기
(df.to_date - df.from_date) / pd.Timedelta(minutes=1)
또는
(df.to_date - df.from_date).dt.total_seconds() / 60
output >>>
0 720.0
1 900.0
2 1080.0
3 1260.0
4 1440.0
5 1620.0
6 1800.0
7 1980.0
8 2160.0
dtype: float64
초 차이 구하기
(df.to_date - df.from_date) / pd.Timedelta(seconds=1)
또는
(df.to_date - df.from_date).dt.total_seconds()
output >>>
0 43200.0
1 54000.0
2 64800.0
3 75600.0
4 86400.0
5 97200.0
6 108000.0
7 118800.0
8 129600.0
dtype: float64
날짜 차이 구하기
(df.to_date - df.from_date).dt.days
output >>>
0 0
1 0
2 0
3 0
4 1
5 1
6 1
7 1
8 1
dtype: int64
날짜 제외한 초 차이 구하기
hours + minutes + seconds의 결과를 seconds로 가져온다. days는 제외
(df.to_date - df.from_date).dt.seconds
output >>>
0 43200
1 54000
2 64800
3 75600
4 0
5 10800
6 21600
7 32400
8 43200
dtype: int64
반응형
'Python' 카테고리의 다른 글
[python] pandas.DataFrame.round 반올림 (0) | 2023.08.06 |
---|---|
[python] SQL select query by date (0) | 2023.08.05 |
[python] DatetimeIndex 만들기 - pandas.date_range (0) | 2023.08.03 |
[python error] SQL syntax error 1064 (0) | 2023.08.02 |
[python] DataFrame 결합 - pandas.DataFrame.join (0) | 2023.08.02 |