如何计算两个之前间相差的月数
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