Увеличьте частоту дискретизации для каждой 1 секунды в кадре данных, повторив последнюю строку - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть кадр данных с переменной частотой дискретизации <30 Гц.Я хочу увеличить частоту дискретизации до 30, повторяя последний ряд данных кадра каждую секунду.Столбец метки времени в моем фрейме данных не имеет миллисекунд.Одна и та же отметка времени повторяется для всех строк этой секунды.Также данные не являются непрерывными, некоторые секунды отсутствуют между ними.Мой фрейм данных <code>df содержит столбцы ['Timestamp','vm','angle'].

Вот что я попробовал

def samfreq(args):
    size = len(args)
    inc= 30-size
    args=args.append( args.iloc[[-1]*inc] )
    args = args.reset_index(drop=True)
    return args


df= df.resample('1S',on='Timestamp').apply(samfreq)

Запуск приведенного выше кода дает мне эту ошибку

IndexError: positional indexers are out-of-bounds

Еслиданные непрерывны, я не думаю, что получу вышеуказанную ошибку.Как увеличить частоту дискретизации для всех секунд данных, игнорируя пропущенные промежуточные секунды.

Вот пример кода для генерации данных, аналогичных тому, на котором я просыпаюсь. Я намеренно пропустил секунду вданные для имитации моих данных.

d = {'Timestamp': pd.date_range(start='2016-04-15 10:36:47', end='2016-04-15 10:36:47', periods=12), 'vm': np.random.randn(12),'angle':np.random.randn(12)}
df = pd.DataFrame(data=d)
d = {'Timestamp': pd.date_range(start='2016-04-15 10:36:49', end='2016-04-15 10:36:49', periods=15), 'vm': np.random.randn(15),'angle':np.random.randn(15)}
df1 = pd.DataFrame(data=d)
df = df.append(df1,ignore_index=True)

Как мне заставить это работать?

1 Ответ

0 голосов
/ 29 ноября 2018

Просто используйте groupby вместо resample , и все будет работать так, как вы ожидаете:

df.groupby('Timestamp').apply(samfreq).reset_index(drop = True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...