У меня есть несколько длинных кодов с проблемой, когда я пытаюсь объединить (или объединить / объединить) два набора данных, я получаю это TypeError: Cannot compare type 'Timestamp' with type 'int'
Оба набора данных получены из повторной выборки одинаково начальный начальный набор данных. master_hrs
df - это процесс повторной выборки, использующий пакет алгоритма точки изменения Python, называемый rupters. (pip install ruptures
для запуска кода). daily_summary
df просто использует Pandas для пересчета среднесуточных значений и сумм. Но я получаю ошибку, когда пытаюсь объединить наборы данных вместе. Есть ли у кого-нибудь советы, чтобы попробовать?
Создание некоторых поддельных данных приводит к той же ошибке, что и мой набор данных реального мира. Я думаю, что проблема у меня заключается в том, что я пытаюсь сравнить datime с numpy кое-как ... Любые советы с благодарностью. Спасибо
import ruptures as rpt
import calendar
import numpy as np
import pandas as pd
np.random.seed(11)
rows,cols = 50000,2
data = np.random.rand(rows,cols)
tidx = pd.date_range('2019-01-01', periods=rows, freq='H')
df = pd.DataFrame(data, columns=['Temperature','Value'], index=tidx)
def changPointDf(df):
arr = np.array(df.Value)
#Define Binary Segmentation search method
model = "l2"
algo = rpt.Binseg(model=model).fit(arr)
my_bkps = algo.predict(n_bkps=5)
# getting the timestamps of the change points
bkps_timestamps = df.iloc[[0] + my_bkps[:-1] +[-1]].index
# computing the durations between change points
durations = (bkps_timestamps[1:] - bkps_timestamps[:-1])
#hours calc
d = durations.seconds/60/60
d_f = pd.DataFrame(d)
df2 = d_f.T
return df2
master_hrs = pd.DataFrame()
for idx, days in df.groupby(df.index.date):
changPoint_df = changPointDf(days)
values = changPoint_df.values.tolist()
master_hrs=master_hrs.append(values)
master_hrs.columns = ['overnight_AM_hrs', 'moring_startup_hrs', 'moring_ramp_hrs', 'high_load_hrs', 'evening_shoulder_hrs']
daily_summary = pd.DataFrame()
daily_summary['Temperature'] = df['Temperature'].resample('D').mean()
daily_summary['Value'] = df['Value'].resample('D').sum()
final_df = daily_summary.join(master_hrs)