如何计算两个之前间相差的月数

三叶草body / 2023-08-09 / 原文

如何计算两个之前间相差的月数

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