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

浙公网安备 33010602011771号