gpt4 book ai didi

python - 计算 Pandas 数据框中每单位时间的发生率

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

我正在寻求计算数据框中事件发生的速率。

我在 pandas 中有一个数据框,用于跟踪特定事件的发生和持续时间。所以最初它看起来像这样:

   onset  duration label channels  end_time
0 1.5 0.1 HFO A1 10
1 2.0 1.0 HFO A2 10
2 3.0 1.0 HFO A3 10
3 5.5 0.1 HFO A1 10

其中 onsetdurationend_time 以秒为单位。 channels 表示我想要循环的一组独特的组。

期望的输出

我想得到这样的东西:

rate_dict = {
'A1': 0.2, # rate of 0.2 per second (i.e. 2 occurrences over 10 second time frame)
'A2': 0.1, # rate of 0.1 per second
'A3': 0.1
}

到目前为止我的尝试

首先,我根据 channels 获得一个组:

for idx, group in df.groupby(['channels']):

然后我将内容转换为日期时间索引

                             onset  duration label channels  end_time
timestamp
2021-02-10 19:25:19.391130+00:00 1.5 0.1 HFO A1 10
2021-02-10 19:25:23.391130+00:00 5.5 0.1 HFO A1 10

接下来,我考虑重新索引开始时间(0 秒)和结束时间(在本例中为 10 秒):

# rate is say 's' for creating a dummy row for every second
dt_idx = pd.date_range(ref_timestamp, end_timestamp, freq=rate)
group = group.reindex(dt_idx, fill_value=np.nan)

问题是它不会拾取 channel A1 在 1.5 和 5.5 秒处发生的事件。所以我最终基本上得到了所有 nans 的行,而理想情况下,我在重新采样的这段时间里得到了 2 的计数。

期望的泛化

理想情况下,我可以指定其他费率字符串(例如“hr”),它会返回每小时的费率。在这种情况下将是:

rate_dict = {
'A1': 2.0, # rate of 2 per hr (i.e. 2 occurrences over a 1 hour time frame)
'A2': 1.0, # rate of 1 per hr
'A3': 1.0
}

最佳答案

首先,我们可以将您的表重新创建为 Pandas DataFrame:

import pandas as pd
d = {'onset': [1.5 ,2.0 ,3.0 ,5.5],
'duration': [0.1, 1.0, 1.0, 0.1],
'label': ['HFO', 'HFO', 'HFO', 'HFO'],
'channels': ['A1', 'A2', 'A3', 'A1'],
'end_time': [10.0, 10.0, 10.0, 10.0]}

df = pd.DataFrame(d)

要直接解决您的问题,根据每秒出现次数,我们可以计算出现次数并除以平均值 end_time:

df.groupby('channels').end_time.agg(lambda x: x.count()/x.mean()).to_dict()

为了概括这一点,让我们创建一个函数 to_freq,它将系列 x 和所需的速率作为字符串 rate 作为输入:

def to_freq(x, rate='s'):
d = {'s':1, 'm': 60, 'h': 60*60, 'd': 60*60*24}
f = x.count()/x.mean()
return f/d[rate]

现在,我们原来的代码变成了:

df.groupby('channels').end_time.agg(lambda x: to_freq(x)).to_dict()

我们可以找到每小时发生的次数如下:

df.groupby('channels').end_time.agg(lambda x: to_freq(x, rate='h')).to_dict()

关于python - 计算 Pandas 数据框中每单位时间的发生率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66143839/

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