gpt4 book ai didi

python - 使用 "bin size"/"frequency"对 Pandas 数据帧重新采样

转载 作者:行者123 更新时间:2023-11-30 23:31:09 26 4
gpt4 key购买 nike

9我有一个多索引数据帧,我想对其进行重新采样,以将数据点的频率降低 3 倍(意味着每 3 行变为 1 行)。

这个:

                    time  value
ID measurement
ET001 0 0 2
1 0.15 3
2 0.3 4
3 0.45 3
4 0.6 3
5 0.75 2
6 0.9 3
ET002 0 0 2
1 0.16 5
2 0.32 4
3 0.45 3
4 0.6 3
5 0.75 2

我想变成这样:

                    time  value
ID measurement
ET001 0 0.15 3
1 0.6 2.7
2 0.9 3
ET002 0 0.16 3.7
1 0.6 2.7

我尝试将时间列转换为 pandas 日期时间索引,如下所示,然后使用重新采样:

df = df.set_index(pd.DatetimeIndex(timecourse_normed['Time']))
df = df.groupby(level=0).resample(rule='0.1S', how=np.mean)

但是第一行给出了实际日期(1970 年左右),这对第二行毫无帮助。浏览 arund stack Overflow 我发现了一些类似的 quiestios,它们都有不基于 panda 的重新采样的解决方案 - 而且,遗憾的是,对于我的用例来说不可行。

你能帮我一下吗?

最佳答案

我认为你的想法可能是 - 将每个 ID 内的记录按每个 3 条记录(如 SQL 中的 ntile(3))划分为 bin,并按其分组并计算平均值。为了创建这个数字,我们可以利用这样一个事实:您已经为每行提供了连续的数字 - 索引的测量级别。因此,我们只需将该数字除以 3 即可得到我们需要的数字:

>>> df
time value ntile
ID measurement
ET001 0 0.00 2 0
1 0.15 3 0
2 0.30 4 0
3 0.45 3 1
4 0.60 3 1
5 0.75 2 1
6 0.90 3 2
ET002 0 0.00 2 0
1 0.16 5 0
2 0.32 4 0
3 0.45 3 1
4 0.60 3 1
5 0.75 2 1

因此我们可以使用这样的辅助函数并将其应用于每个组以获得所需的结果。

>>> def helper(x):
... x = x.reset_index()
... x = x.groupby(x['measurement'].div(3)).mean()
... del x['measurement']
... return x
...
>>> df.groupby(level=0).apply(helper)
time value
ID measurement
ET001 0 0.15 3.000000
1 0.60 2.666667
2 0.90 3.000000
ET002 0 0.16 3.666667
1 0.60 2.666667

希望有帮助。

关于python - 使用 "bin size"/"frequency"对 Pandas 数据帧重新采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134387/

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