gpt4 book ai didi

python - Pandas :根据其他行的值删除行

转载 作者:太空宇宙 更新时间:2023-11-04 02:04:54 25 4
gpt4 key购买 nike

我有一个 pandas 数据框,其列名为“ID”、“datetime”、“medication”。现在,我正试图在给定时间内消除与美沙酮药物相关的所有吗啡药物行。

例如:

ID-66531 在 2013 年 2 月 19 日 20:54 接受了第一次美沙酮药物治疗。由于美沙酮和吗啡都是止痛药,因此药物的作用相同。因此,如果在每个 ID 组的吗啡药物治疗 24 小时内给予美沙酮,我将尝试消除吗啡药物治疗行。因此,对于 ID-66531,如果任何吗啡落在给定的美沙酮的 24 小时时间范围内,在这种情况下为 2013-02-18 20:53 和 2013-02-19 20:54,我想删除每个记录ID组

实际数据框:

64347   2012-02-15 19:24:00 morphine
64347 2012-02-15 22:54:00 morphine
64347 2012-02-16 05:50:00 morphine
64347 2012-02-16 12:47:00 oxyCODONE
64347 2012-10-20 05:03:00 morphine
64347 2012-10-21 15:10:00 morphine
64347 2012-10-21 19:06:00 morphine
64347 2012-11-16 16:00:00 morphine
64990 2012-09-21 07:10:00 oxyCODONE
64990 2012-09-21 16:45:00 fentaNYL
64990 2012-09-21 23:21:00 oxyCODONE
64990 2012-09-22 15:40:00 oxyCODONE
66531 2012-12-18 08:31:00 acetaminophen-HYDROcodone
66531 2012-12-18 17:44:00 acetaminophen-HYDROcodone
66531 2013-02-18 22:36:00 morphine
66531 2013-02-19 05:07:00 morphine
66531 2013-02-19 10:13:00 morphine
66531 2013-02-19 15:27:00 morphine
66531 2013-02-19 17:33:00 oxyCODONE
66531 2013-02-19 19:20:00 acetaminophen-HYDROcodone
66531 2013-02-19 20:54:00 methadone
66531 2013-02-20 06:46:00 methadone
66531 2013-02-20 13:21:00 methadone
66531 2013-02-20 22:18:00 methadone

预期的数据帧:

64347   2012-02-15 19:24:00 morphine
64347 2012-02-15 22:54:00 morphine
64347 2012-02-16 05:50:00 morphine
64347 2012-02-16 12:47:00 oxyCODONE
64347 2012-10-20 05:03:00 morphine
64347 2012-10-21 15:10:00 morphine
64347 2012-10-21 19:06:00 morphine
64347 2012-11-16 16:00:00 morphine
64990 2012-09-21 07:10:00 oxyCODONE
64990 2012-09-21 16:45:00 fentaNYL
64990 2012-09-21 23:21:00 oxyCODONE
64990 2012-09-22 15:40:00 oxyCODONE
66531 2012-12-18 08:31:00 acetaminophen-HYDROcodone
66531 2012-12-18 17:44:00 acetaminophen-HYDROcodone
66531 2013-02-19 17:33:00 oxyCODONE
66531 2013-02-19 19:20:00 acetaminophen-HYDROcodone
66531 2013-02-19 20:54:00 methadone
66531 2013-02-20 06:46:00 methadone
66531 2013-02-20 13:21:00 methadone
66531 2013-02-20 22:18:00 methadone

我尝试了什么:

我创建了一个 timediff 列,用于获取两条记录之间的时间差。

df['timediff'] = df.sort_values(by= 'datetime').groupby('ID')['datetime'].diff()

然后我将 24 小时分配给变量 x

x = '24:00:00'并尝试使用以下代码去除吗啡

df = df.groupby('ID').apply(lambda x : x.loc[~(x['Medication'] == 'morphine')<x]

但是此代码会删除吗啡记录,而不管给定时间的美沙酮药物。

如果我能得到一些帮助,我将不胜感激。

最佳答案

这是我想出的:

import pandas
df = pandas.read_csv('test.tsv', header=None, sep='\s+',
parse_dates = [['date', 'time']],
names=['patient_id', 'date', 'time','drug'])

to_drop = set()
for _, patient in df.groupby('patient_id'):
meth_times = patient.loc[patient['drug'] == 'methadone']['date_time']
morph_doses = patient.loc[patient['drug'] == 'morphine']
for i, md in morph_doses.iterrows():
for mt in meth_times:
days_elapsed = (mt - md['date_time']).days
if days_elapsed < 1:
to_drop.add(i)
break

df = df[~df.index.isin(to_drop)]

与@ulmefors 建议的答案一样,这是在吗啡/美沙酮的每一行上重复迭代,所以效率有点低,但除非你正在处理一个巨大的数据集,否则它应该足够快地完成工作,这将是微不足道。 (但与其他答案不同的是,它只是在每位患者的吗啡/美沙酮剂量内迭代多次,而不是遍历所有可能的行组合)

关于python - Pandas :根据其他行的值删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54912711/

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