我有以下数据框:
Disease HeartRate State MonthStart MonthEnd
Covid 89 Texas 2020-02-28 2020-03-31
Covid 91 Texas 2020-03-31 2020-04-30
Covid 87 Texas 2020-07-31 2020-08-30
Cancer 90 Texas 2020-02-28 2020-03-31
Cancer 88 Florida 2020-03-31 2020-04-30
Covid 89 Florida 2020-02-28 2020-03-31
Covid 87 Florida 2020-03-31 2020-04-30
Flu 90 Florida 2020-02-28 2020-03-31
我需要在“心脏”列中从“当前行”减去“上一行”的值,并创建一个新的列。
但是,有一些条件:
- 仅当“疾病”和“状态”列具有相同的值时,才会减去行值。
- 仅当行在连续的月份中时,才会减去行值。如果时间线上有断点,则不会减去值。
- 如果没有要减去的上一行值,则只放置“心率”值。
期望输出结果:
Disease HeartRate State MonthStart MonthEnd HeartRateDiff
Covid 89 Texas 2020-02-28 2020-03-31 89
Covid 91 Texas 2020-03-31 2020-04-30 2
Covid 87 Texas 2020-07-31 2020-08-30 87
Cancer 90 Texas 2020-02-28 2020-03-31 90
Cancer 88 Florida 2020-03-31 2020-04-30 88
Covid 89 Florida 2020-02-28 2020-03-31 89
Covid 87 Florida 2020-03-31 2020-04-30 -2
Flu 90 Florida 2020-02-28 2020-03-31 90
我知道如何使用以下代码从当前行中减去前一行:
df[‘DiffHeartRate’] = df.groupby(['Disease', 'State'])['HeartRate'].transform(pd.Series.diff)
然而,我目前遇到两个问题:
- 如果没有上一行可供相减,如何保持相同的值。
- 检查时间轴的连续性(是否为下一个月)。
有没有更好的方法?任何帮助都将不胜感激。谢谢!
Covid 92 Texas 2020-12-31 2020-01-31
和Covid 93 Texas 2021-01-31 2021-02-28
。这两行数据是相邻月份的,应该显示HearRateDiff
为1
。然后可以查看哪些解决方案给出了正确的结果。 - SeaBean