如何計算兩個之前間相差的月數
import pandas as pd
獲取數據
使用以下模擬數據來演示計算兩個之前間相差的月數。
df = pd.read_csv('./打卡記錄.csv')
df
|
姓名 |
日期 |
打卡記錄 |
0 |
張三 |
2022/1/5 |
上班 |
1 |
張三 |
2022/2/10 |
上班 |
2 |
張三 |
2022/1/18 |
請假 |
3 |
張三 |
2022/5/22 |
上班 |
4 |
張三 |
2022/9/28 |
上班 |
獲取上班的打卡記錄數據
# 獲取上班的打卡記錄數據
df = df[df['打卡記錄'] == '上班'].sort_values(by=['日期'])
df
|
姓名 |
日期 |
打卡記錄 |
0 |
張三 |
2022/1/5 |
上班 |
1 |
張三 |
2022/2/10 |
上班 |
3 |
張三 |
2022/5/22 |
上班 |
4 |
張三 |
2022/9/28 |
上班 |
方法一
date1 = pd.to_datetime(df['日期'].shift(), format='%Y-%m-%d').dt.to_period('M')
date2 = pd.to_datetime(df['日期'], format='%Y-%m-%d').dt.to_period('M')
df['相差月數—1'] = (date2 - date1).apply(lambda x: x if pd.isnull(x) else x.n)
df
|
姓名 |
日期 |
打卡記錄 |
相差月數—1 |
0 |
張三 |
2022/1/5 |
上班 |
NaT |
1 |
張三 |
2022/2/10 |
上班 |
1 |
3 |
張三 |
2022/5/22 |
上班 |
3 |
4 |
張三 |
2022/9/28 |
上班 |
4 |
df['相差月數—1']
0 NaT
1 1
3 3
4 4
Name: 相差月數—1, dtype: object
方法二
date1 = pd.to_datetime(df['日期'].shift(), format='%Y-%m-%d')
date2 = pd.to_datetime(df['日期'], format='%Y-%m-%d')
df['相差月數—2'] = (date2.dt.year - date1.dt.year) * 12 + (date2.dt.month - date1.dt.month)
df
|
姓名 |
日期 |
打卡記錄 |
相差月數—1 |
相差月數—2 |
0 |
張三 |
2022/1/5 |
上班 |
NaT |
NaN |
1 |
張三 |
2022/2/10 |
上班 |
1 |
1.0 |
3 |
張三 |
2022/5/22 |
上班 |
3 |
3.0 |
4 |
張三 |
2022/9/28 |
上班 |
4 |
4.0 |
df['相差月數—2']
0 NaN
1 1.0
3 3.0
4 4.0
Name: 相差月數—2, dtype: float64