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
我有一个时间序列数据,需要创建 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