gpt4 book ai didi

python - Pandas 相当于整数索引的重采样

转载 作者:太空狗 更新时间:2023-10-29 20:51:26 26 4
gpt4 key购买 nike

我正在寻找一个 pandas 等效于 resample 方法的数据帧,它不是 DatetimeIndex 而是一个整数数组,甚至可能是 float 。

我知道在某些情况下(例如 this one),重采样方法可以很容易地用重新索引和插值代替,但在某些情况下(我认为)它不能。

例如,如果我有

df = pd.DataFrame(np.random.randn(10,2))
withdates = df.set_index(pd.date_range('2012-01-01', periods=10))
withdates.resample('5D', np.std)

这给了我

                   0         1
2012-01-01 1.184582 0.492113
2012-01-06 0.533134 0.982562

但我无法使用 df 和重新采样生成相同的结果。所以我正在寻找可以作为

 df.resample(5, np.std)

那会给我

          0         1
0 1.184582 0.492113
5 0.533134 0.982562

有这样的方法吗?我能够创建此方法的唯一方法是手动将 df 分成较小的数据帧,应用 np.std 然后将所有内容连接回去,我发现这很慢而且不是一点都不聪明。

干杯

最佳答案

设置

import pandas as pd
import numpy as np

np.random.seed([3,1415])
df = pd.DataFrame(np.random.rand(20, 2), columns=['A', 'B'])

您需要自己创建标签进行分组。我会使用:

(df.index.to_series() / 5).astype(int)

为您提供一系列值,例如 [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, ...] 然后在 中使用它>groupby

您还需要为新数据框指定索引。我会使用:

df.index[4::5]

要获取当前索引,从第 5 个位置开始(因此 4),之后每第 5 个位置。它看起来像 [4, 9, 14, 19]。我本可以将其作为 df.index[::5] 来获取起始位置,但我选择了结束位置。

解决方案

# assign as variable because I'm going to use it more than once.
s = (df.index.to_series() / 5).astype(int)

df.groupby(s).std().set_index(s.index[4::5])

看起来像:

           A         B
4 0.198019 0.320451
9 0.329750 0.408232
14 0.293297 0.223991
19 0.095633 0.376390

其他注意事项

这相当于下采样。我们还没有解决抽样问题。

要通过更频繁的方式从我们生成的数据帧索引返回到数据帧索引,我们可以像这样使用 reindex:

# assign what we've done above to df_down
df_down = df.groupby(s).std().set_index(s.index[4::5])

df_up = df_down.reindex(range(20)).bfill()

看起来像:

           A         B
0 0.198019 0.320451
1 0.198019 0.320451
2 0.198019 0.320451
3 0.198019 0.320451
4 0.198019 0.320451
5 0.329750 0.408232
6 0.329750 0.408232
7 0.329750 0.408232
8 0.329750 0.408232
9 0.329750 0.408232
10 0.293297 0.223991
11 0.293297 0.223991
12 0.293297 0.223991
13 0.293297 0.223991
14 0.293297 0.223991
15 0.095633 0.376390
16 0.095633 0.376390
17 0.095633 0.376390
18 0.095633 0.376390
19 0.095633 0.376390

我们还可以使用其他东西来重新索引,例如 range(0, 20, 2) 以将样本提高到偶数整数索引。

关于python - Pandas 相当于整数索引的重采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37396264/

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