python - 使用熊猫显示员工开始和结束日期每年工作的月数?
问题描述
我有员工的开始和结束日期,我想显示使用 pandas 每年工作的月数。
ID | Start Date| End Date \
1 | 1\2016 | 3\2018 \
2 | 2\2017 | 4\2019 \
3 | 4\2019 | 3\2020
我正在寻找的总表:
ID | Year | Months Worked \
1 | 2016 | 12 \
1 | 2017 | 12 \
1 | 2018 | 3\
2 | 2017 | 11 \
2 | 2018 | 12 \
2 | 2019 | 4\
3 | 2019 | 9 \
3 | 2020 | 3
解决方案
将两列转换为日期时间:
df["Start Date"] = pd.to_datetime(df["Start Date"])
df["End Date"] = pd.to_datetime(df['End Date'])+ MonthEnd(1)
df.set_index("ID", inplace=True)
获取每年和每个 ID 的月数:
test = df.apply(lambda x: Counter(pd.date_range(x["Start Date"], x["End Date"], freq="M").strftime('%Y')), axis=1)
print(test)
ID
1 {'2016': 12, '2017': 12, '2018': 3}
2 {'2017': 11, '2018': 12, '2019': 4}
3 {'2019': 9, '2020': 3}
将系列转换为dataframe
并获得决赛桌:
final_df = pd.DataFrame(list(test), index=df.index)
final_df["ID"]= final_df.index
pd.melt(final_df, id_vars="ID").dropna().sort_values("ID").reset_index(drop=True)
输出:
ID variable value
0 1 2016 12.0
1 1 2017 12.0
2 1 2018 3.0
3 2 2017 11.0
4 2 2018 12.0
5 2 2019 4.0
6 3 2019 9.0
7 3 2020 3.0
推荐阅读
- android - 无论我设置什么出发地和目的地,我总是得到一条路线
- arrays - 将值排序到数组中
- docker - 如何使用 pod-local 环境变量在 pod 上执行 kubectl 命令?
- jquery - 引导模型 ajax 表单在 MVC 发布后再次在模型主体内加载完整的 ActionResult
- c# - HttpClient.PatchAsync 在 Xamarin.iOS 上引发 PlatformNotSupportedException
- database - Conexion Oracle and ODBC
- oracle - 如何更改交互式网格中过滤器的标签?
- python - 如何让令牌在一段时间后过期?(没有 jwt)
- android-studio - 无法在 Android Studio 3.5.1 中创建语言环境 strings.xml
- xml - XSLT拆分字符串,将它们存储在变量中并输出它们