python-3.x - 如何在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 - 泡菜字符串与泡菜数字,硬盘上不同的泡菜文件大小
- httpclient - 是什么让 HttpSession 具有独特的 HTTP 客户端?
- pandas-groupby - 如何在熊猫中分组并制表值频率
- json - 勘误表 jmeter 提取器上 JMESpath 的不同行为
- laravel - 我在 laravel 中遇到不支持的邮件传输 [sendgrid] 错误
- python - 无法在 Azure 上安装 psycopg2
- json - 如何读取和打印 JSON 数组元素
- css - 背景图像:线性渐变在 Safari 中不起作用
- javascript - JavaScript forEach:如何计算 forEach 函数写入的行数?
- javascript - 更改此 png 的 src 后自动更改 png 颜色的问题