python - 熊猫两列之间的年份差异
问题描述
我有一张如下表。第一栏是年份,第二栏是路面处理的类型,第三栏是路面的得分。我需要通过从当前分数的年份中减去最后一次治疗的年份来创建名为“年份差异”的第三列。例如,2014 年需要减去 2013 年,因为第 9 次处理是在 2013 年完成的,结果是 1 需要记录在相应单元格的 col['year diff'] 中。2022 年需要减去 2020 年,因为第 10 次治疗是在 2020 年完成的。
非常感谢大家的帮助。
真挚地
威尔逊
解决方案
利用:
#check not missing values
m = df['treatment'].notnull()
#create groups starting not missing values
s = m.cumsum()
#add missing values for first group and for not missing values
mask = (s == 0) | m
#subtract score with first score per group
out = df['score'] - df['score'].groupby(s).transform('first')
#add missing values
df['year diff'] = np.where(mask, np.nan, out)
print (df)
year treatment score year diff
0 2010 NaN 1 NaN
1 2011 NaN 2 NaN
2 2012 NaN 3 NaN
3 2013 9.0 4 NaN
4 2014 NaN 5 1.0
5 2015 NaN 6 2.0
6 2016 NaN 7 3.0
7 2017 NaN 8 4.0
8 2018 NaN 9 5.0
9 2019 NaN 10 6.0
10 2020 10.0 11 NaN
11 2021 NaN 12 1.0
12 2022 NaN 13 2.0
13 2023 NaN 14 3.0
14 2024 NaN 15 4.0
15 2025 12.0 16 NaN
16 2026 NaN 17 1.0
17 2027 NaN 18 2.0
推荐阅读
- django - Django Heroku:python:无法打开文件'manage.py':[Errno 2]没有这样的文件或目录
- image-processing - 计算 FIJI/ImageJ 中不同颜色的点之间的距离
- c# - 如何在后台运行 c# 控制台应用程序 .exe?
- oracle - Oracle查询从多个表中获取计数并并排显示
- vue.js - 将表单数据从一个组件传递到另一个组件
- ios - 如何将我的 Swift IOS 应用程序与 Pinterest 集成?
- javascript - 在 javascript 中将 4.5 转换为 4 但将 4.6 转换为 5
- javascript - 突出显示字符串中的每个实例- Javascript
- airflow - 气流任务按计划运行延迟
- mongodb - Mongoose 使用默认值填充