首页 > 解决方案 > 熊猫两列之间的年份差异

问题描述

我有一张如下表。第一栏是年份,第二栏是路面处理的类型,第三栏是路面的得分。我需要通过从当前分数的年份中减去最后一次治疗的年份来创建名为“年份差异”的第三列。例如,2014 年需要减去 2013 年,因为第 9 次处理是在 2013 年完成的,结果是 1 需要记录在相应单元格的 col['year diff'] 中。2022 年需要减去 2020 年,因为第 10 次治疗是在 2020 年完成的。

在此处输入图像描述

非常感谢大家的帮助。

真挚地

威尔逊

标签: pythonpandasdataframe

解决方案


利用:

#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

推荐阅读