gpt4 book ai didi

python - 条件移位 : Subtract 'previous row value' from 'current row value' with multiple conditions in pandas

转载 作者:行者123 更新时间:2023-12-04 00:12:40 25 4
gpt4 key购买 nike

我有以下数据框:

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

我必须从“心脏”列中的“当前行”中减去“上一行”并创建一个新行。

但是,有一些条件:

  1. 仅当“疾病”和“状态”列的值相同时,才会减去行值。
  2. 仅当行在连续月份时才会减去行值。如果时间线有中断,则不会减去值。
  3. 如果没有要减去的前一行值,则仅输入“HeartRate”值。

期望的输出:

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)

但是,我面临两个问题:

  1. 如果没有前一行要减去,则保持相同的值。
  2. 检查时间线的连续性(下个月与否)。

有没有更聪明的方法?任何帮助,将不胜感激。谢谢!

最佳答案

你可以试试这样的:

df['DiffHeartRate']=(df.groupby(['Disease', 'State', 
(df.MonthStart.dt.month.ne(df.MonthStart.dt.month.shift()+1)).cumsum()])['HeartRate']
.apply(lambda x: x.diff())).fillna(df.HeartRate)

    Disease HeartRate   State   MonthStart  MonthEnd    DiffHeartRate
0 Covid 89 Texas 2020-02-28 2020-03-31 89.0
1 Covid 91 Texas 2020-03-31 2020-04-30 2.0
2 Covid 87 Texas 2020-07-31 2020-08-30 87.0
3 Cancer 90 Texas 2020-02-28 2020-03-31 90.0
4 Cancer 88 Florida 2020-03-31 2020-04-30 88.0
5 Covid 89 Florida 2020-02-28 2020-03-31 89.0
6 Covid 87 Florida 2020-03-31 2020-04-30 -2.0
7 Flu 90 Florida 2020-02-28 2020-03-31 90.0

逻辑与其他答案相同,但表示方式不同。

关于python - 条件移位 : Subtract 'previous row value' from 'current row value' with multiple conditions in pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67429159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com