Pandas如何创建连续批次的组(时间序列数据)

Pandas how to create groups of continuous batches (time series data)

我有一个时间序列数据,需要创建 N 个批次进行训练。 例如,对于 3 个批次,需要将行 [0, 1, 2] 标记为 [1, 1, 1],将 [3, 4, 5] 标记为 [2, 2, 2],将 [6, 7, 8] 标记为 [3, 3, 3].

示例数据:

   Diff  N_Bars
0 -2.17    22.0
1  4.13    48.0
2 -0.65     4.0
3  2.06    59.0
4 -2.07    11.0
5  0.68     8.0
6 -0.43     2.0
7  1.21    19.0
8 -0.39     9.0

您可以尝试这样的操作:

import pandas as pd
import numpy as np

n=3 #batches of 3
df=pd.DataFrame({"A":np.random.rand(10),"B":np.random.rand(10)})
df["index"]=df.index
df["label_batches"]=df["index"].apply(lambda x : x//n) 

如果你只是想替换索引而不介意重复,你可以简单地设置一个新的索引index // n_per_group + 1(floor division):

n_per_group = 3
df.index = df.index // n_per_group + 1

优点:可以通过批次标签进行索引
缺点:索引中的重复项可能会造成一些麻烦。


除了替换索引,您当然也可以将其设置为新行:

n_per_group = 3
df['batchlabel'] = df.index // n_per_group + 1

优点:索引中没有重复项。
缺点:必须通过 f.i 间接完成批标签索引。 df[df['batchlabel'] == 2].

推荐的解决方案:


但是 最好的方法 是创建一个 MultiIndex,批次在级别 0 中,旧索引在级别 1 中。这样你就可以避免 重复但仍然能够按批号索引。:

n_per_group = 3
# create multiindex
new_midx = pd.MultiIndex.from_arrays((df.index //  n_per_group  +  1, df.index))
# assign multiindex
df_midx = df.set_index(new_midx)

# index by batch number:
df_midx.loc[2]
# Out:
   Diff  N_Bars
3  2.06    59.0
4 -2.07    11.0
5  0.68     8.0