Допустит, у меня есть pandas.DataFrame
, который имеет почасовые данные в течение 3 дней:Разделительной панды dataframe офсетной строкой
import pandas as pd
import numpy as np
import datetime as dt
dates = pd.date_range('20130101', periods=3*24, freq='H')
df = pd.DataFrame(np.random.randn(3*24,2),index=dates,columns=list('AB'))
Я хотел бы получить каждый, скажем, 6 часов данных и независимо друг от друга поместить кривой это данные. Поскольку функция pandas 'resample
имеет ключевое слово , которое должно быть any numpy array function, я подумал, что, возможно, я попытаюсь использовать resample, чтобы сделать это с помощью polyfit
, но, видимо, нет способа (не так ли?).
Так что единственный альтернативный способ я думал сделать что отделяющий df
в последовательность DataFrame
с, так что я пытаюсь создать функцию, которая будет работать, такие как
l=splitDF(df, '6H')
и вернется ко мне список данных, каждый из которых содержит 6 часов данных (за исключением, возможно, первого и последнего). До сих пор я не получил ничего, что могло работать только что-то вроде следующего ручного метода:
def splitDF(data, rule):
res_index=data.resample(rule).index
out=[]
cont=0
for date in data.index:
... check for date in res_index ...
... and start cutting at those points ...
Но этот метод будет очень медленным, и, вероятно, более быстрый способ сделать это. Есть ли быстрый (возможно, даже питонический) способ сделать это?
Спасибо!
EDIT
Лучший метод (который нуждается в некотором улучшении, но это быстрее) будет следующим:
def splitDF(data, rule):
res_index=data.resample(rule).index
out=[]
pdate=res_index[0]
for date in res_index:
out.append(data[pdate:date][:-1])
pdate=date
out.append(data[pdate:])
return out
Но все-таки мне кажется, что там должен быть лучший способ.
Это предложение для решения. Как насчет? спрашивал OP, если решение получит его, что ему нужно. Я удивлен, что это нужно объяснить. – JAB
Я пробовал это, но получается, когда индекс является датой, это разделяет df неравномерно. – TomCho