首页 > 解决方案 > 如何在python中迭代pandas数据框行并根据行中存在的值创建新列

问题描述

我有一个患者数据框,样本看起来像这样。

pat_id 药物日期 lag_date lag_grace_dte

1234 A 1-Jan-17 1-Jan-17 11-Jan-17
1234 A 11-Jan-17 1-Jan-17 1-Jan-17
1234 A 26-Jan-17 11-Jan-17 26-Jan- 17
1234 A 2017 年 2 月 5 日 17 年 1 月 26 日 17 年 2 月 15 日

样本数据所需的输出 和输出应基于患者 ID、日期和 lag_grace_date 列。

以下是业务标准。我正在尝试为患者建立一个储存算法

如果患者“1234”在“2017 年 1 月 1 日”服用了“A”药物 20 天,那么他的下一次就诊日期(日期)应该是“2017 年 1 月 21 日”。这应该根据以下内容与 lag_grace_dte 进行检查。如果他的下一个日期小于 lag_grace 日期,那么我们应该为该行中的该患者修改日期列为 lag_grace_dte +1。

if date < lag_grace_dte then lag_grace_dte+1 end as mod_date

输出如下所示:

pat_id  drug    date        lag_grace_dte   mod_date

1234    A       1-Jan-17    11-Jan-17       1-Jan-17
1234    A       11-Jan-17   11-Jan-17       12-Jan-17
1234    A       26-Jan-17   26-Jan-17       26-Jan-17
1234    A       5-Feb-17    15-Feb-17       5-Feb-17

提前致谢。

下面是我正在尝试的代码,但它给了我日期列作为输出,没有任何改变。我是 python 新手,请就此提出建议。

from datetime import date, timedelta
day = timedelta(days = 1)   
for a,b,c,d in zip(drugs.pat_id,drugs.date, drugs.lag_date,drugs.lag_grace_dte):        
    if b==c:                
        adj_dte = drugs.date        
    elif b<d:                    
        adj_dte = drugs.lag_grace_dte+day        
    elif b>d:                        
        adj_dte = drugs.date
    print(adj_dte)
    break

上述代码的输出:

mod_date

2017 年 1 月 1 日 17 年 1 月 11 日 17 年 1 月 26 日 2017 年 2 月 5 日

标签: python-3.xpandasql

解决方案


推荐阅读