in decisionai_plugin/common/util/data.py [0:0]
def generate_filled_missing_by_field(series_data, start, end, gran, custom_in_seconds, fill_type:Fill, fill_value, fields=None):
if fields is None:
fields = []
fields.insert(0, VALUE)
data_panel = {}
full_data_range = pd.date_range(start=start, end=get_time_offset(end, (gran, custom_in_seconds), -1), freq=convert_freq(Gran[gran], custom_in_seconds))
full_data_range = pd.DataFrame(full_data_range, columns=[TIMESTAMP])
full_data_range[TIMESTAMP] = full_data_range[TIMESTAMP].dt.tz_localize(None)
# set index to improve merging performance
full_data_range = full_data_range.set_index(TIMESTAMP)
series_info = []
for series in series_data:
if series is None:
pass
metric_id = series.metric_id
series_id = series.series_id
taglist = series.dim
series_info.append([metric_id, series_id, taglist])
ts_df = pd.DataFrame([value[TIMESTAMP] for value in series.value], columns=[TIMESTAMP])
ts_df[TIMESTAMP] = ts_df[TIMESTAMP].dt.tz_localize(None)
ts_df.set_index(TIMESTAMP, inplace=True)
for field in fields:
ts_df[series_id] = [value[field] for value in series.value]
ts_df = pd.merge(full_data_range, ts_df, how='left', on=TIMESTAMP)
if field not in data_panel:
data_panel[field] = ts_df
else:
data_panel[field][series_id] = ts_df[series_id]
timestamps = []
cols_len = len(data_panel[VALUE].columns.values.tolist())
for index, row in data_panel[VALUE].iterrows():
not_missing = False
for i in range(cols_len):
if pd.notna(row[i]):
not_missing = True
break
timestamps.append([index, not_missing])
for field in fields:
if field == VALUE:
data_panel[field] = fill_missing(data_panel[field], fill_type, fill_value)
else:
data_panel[field] = data_panel[field].fillna(0)
data_panel[field].reset_index(drop=False, inplace=True)
return data_panel, series_info, timestamps