gpt4 book ai didi

python - 已知半衰期时如何为药物的不规则时间序列填充/缺失值

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

我有一个数据框 (df),其中 A 列是在时间戳给出的时间点给药的药物单位。鉴于药物的半衰期(180 分钟),我想用药物浓度填充缺失值 (NaN)。我正在努力处理 pandas 中的代码。非常感谢帮助和洞察力。提前致谢

df
A
Timestamp
1991-04-21 09:09:00 9.0
1991-04-21 3:00:00 NaN
1991-04-21 9:00:00 NaN
1991-04-22 07:35:00 10.0
1991-04-22 13:40:00 NaN
1991-04-22 16:56:00 NaN

鉴于药物的半衰期为 180 分钟。我想将 na(values) 作为耗时和药物半衰期的函数来填充

有点像

Timestamp             A     

1991-04-21 09:00:00 9.0
1991-04-21 3:00:00 ~2.25
1991-04-21 9:00:00 ~0.55
1991-04-22 07:35:00 10.0
1991-04-22 13:40:00 ~2.5
1991-04-22 16:56:00 ~0.75

最佳答案

您的时间戳未排序,我假设这是一个错字。我在下面修复了它。

import pandas as pd
import numpy as np
from StringIO import StringIO

text = """TimeStamp A
1991-04-21 09:09:00 9.0
1991-04-21 13:00:00 NaN
1991-04-21 19:00:00 NaN
1991-04-22 07:35:00 10.0
1991-04-22 13:40:00 NaN
1991-04-22 16:56:00 NaN """

df = pd.read_csv(StringIO(text), sep='\s{2,}', engine='python', parse_dates=[0])

这是神奇的代码。

# half-life of 180 minutes is 10,800 seconds
# we need to calculate lamda (intentionally mis-spelled)
lamda = 10800 / np.log(2)

# returns time difference for each element
# relative to first element
def time_diff(x):
return x - x.iloc[0]

# create partition of non-nulls with subsequent nulls
partition = df.A.notnull().cumsum()

# calculate time differences in seconds for each
# element relative to most recent non-null observation
# use .dt accessor and method .total_seconds()
tdiffs = df.TimeStamp.groupby(partition).apply(time_diff).dt.total_seconds()

# apply exponential decay
decay = np.exp(-tdiffs / lamda)

# finally, forward fill the observations and multiply by decay
decay * df.A.ffill()

0 9.000000
1 3.697606
2 0.924402
3 10.000000
4 2.452325
5 1.152895
dtype: float64

关于python - 已知半衰期时如何为药物的不规则时间序列填充/缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38386835/

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