Я совершенно новый с python и борюсь с shift
в пандах.Python pandas shift dataframe с индексом времени
Я сравниваю данные, но его нужно сопоставить, чтобы сравнить его. Чтобы выровнять данные, мне нужно только сдвинуть одно из значений индекса данных.
Reference data: Data to be shifted:
acc acc
index index
1480681219**96**0000000 1 1480681220**04**0000000 8
1480681220**00**0000000 2 1480681220**08**0000000 9
1480681220**04**0000000 3 1480681220**12**0000000 7
1480681220**08**0000000 4 1480681220**16**0000000 10
1480681220**12**0000000 5 1480681220**20**0000000 6
(опция полужирного редактирования, похоже, не работает, но я хотел бы выделить те части индексов)
Я хотел бы перенести мой фрейм данных с количеством дополнительного времени, отведенным. Обратите внимание: время в наносекундах. Я понял, что что-то вроде df.shift(2)
сдвигает мои данные 2 места, но я хотел бы перенести свои данные с -80000000 наносекунд, который в данном случае 2 места:
Вход:
acc
index
1480681220040000000 8
1480681220080000000 9
1480681220120000000 7
1480681220160000000 10
1480681220200000000 6
Желаемый результат:
acc
index
1480681219960000000 8
1480681220000000000 9
1480681220040000000 7
1480681220080000000 10
1480681220120000000 6
1480681220160000000 NaN
1480681220200000000 NaN
Это меньше масштаб моего кода:
class device_data(object):
def __init__(self):
_index = [1480681220040000000,
1480681220080000000,
1480681220120000000,
1480681220160000000,
1480681220200000000]
self.df = pd.DataFrame({'acc': [8, 9, 7, 10, 6], 'index': _index})
self.df = self.df.set_index('index')
if __name__ == '__main__':
extratime = np.int64(-40000000)
session = dict()
session[2] = {'testnumber': '401',
'devicename': 'peanut'}
session[2]['data_in_device_class'] = device_data()
print session[2]['data_in_device_class'].df
if hasattr(session[2]['data_in_device_class'], 'df'):
session[2]['data_in_device_class'].df = session[2]['data_in_device_class'].df.shift(int(round(extratime)))
else:
pass
print session[2]['data_in_device_class'].df
Когда я запустил исходный код, он дал мне эту ошибку: OverflowError: Python int too large to convert to C long
Я использовал extratime = np.int64(extratime)
для решения проблемы. Я замечаю, что с уменьшенной версией моего кода это действительно не нужно.
Мой вопрос по-прежнему заключается в том, как я мог бы использовать сдвиг, чтобы переместить мой индекс со значением, а не с количеством мест, которые нужно переместить?
Спасибо
Если вы планируете переложить всю Д.Ф., вы бы лучше 'shift'ing индекс, а затем' 'reindex' или np.roll (DF.index, some_value) 'и использовать возвращаемый массив для' reindex' – EdChum
Когда вы говорите «сдвиг вверх или вниз», вы ожидаете «NaN» сверху или снизу после переключения или хотите усеченный df? – EdChum
@ EdChum: Я понял, что задал неправильный вопрос, поскольку оба ваши ответы были полезными, но это было не то, чего я хотел достичь. Мне стыдно говорить, что мне нужно переписать весь вопрос. Я понял, что на самом деле хочу использовать сдвиг только для сдвига acc, но я бы хотел изменить значение с «exstra time». Я отредактирую свой вопрос так, чтобы он также указывал, что я ищу –