Pandas как создавать группы непрерывных партий (данные временного ряда) - PullRequest
0 голосов
/ 04 августа 2020

У меня есть временной ряд данных, который мне нужен для создания пакетов 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

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Если вы просто хотите заменить индекс и не возражаете против дубликатов, вы можете просто установить новый индекс с помощью index // n_per_group + 1 (разделение по этажам):

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

Advantage : Вы можете индексировать по этикетке партии. Недостаток : Дубликаты в индексе, вероятно, вызовут некоторые проблемы.

Вместо замены индекса вы, конечно, также можете установить это в новую строку:

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

Преимущество : в индексе нет дубликатов. Недостаток : Индексирование по этикетке партии должно выполняться косвенно с помощью fi 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
1 голос
/ 04 августа 2020

Можно попробовать примерно так:

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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...