def add_timeseries(self, df, meta=False): """add a timeseries dataframe to the TimeSeries instance Parameters ---------- df : a Pandas dataframe either - in tabular form (cols: region, variable, unit, year) - in 'IAMC-style' format (cols: region, variable, unit, [years]) meta : boolean indicator whether this timeseries is 'meta-data' (special treatment during cloning for MESSAGE-scheme scenarios) """ meta = 1 if meta else 0 if "time" in df.columns: raise ("sub-annual time slices not supported by Python interface!") # if in tabular format if ("value" in df.columns): df = df.sort_values(by=['region', 'variable', 'unit', 'year'])\ .reset_index(drop=True) region = df.region[0] variable = df.variable[0] unit = df.unit[0] time = None jData = java.LinkedHashMap() for i in df.index: if not (region == df.region[i] and variable == df.variable[i] and unit == df.unit[i]): # if new 'line', pass to Java interface, start a new # LinkedHashMap self._jobj.addTimeseries(region, variable, time, jData, unit, meta) region = df.region[i] variable = df.variable[i] unit = df.unit[i] jData = java.LinkedHashMap() jData.put(java.Integer(int(df.year[i])), java.Double(float(df.value[i]))) # add the final iteration of the loop self._jobj.addTimeseries(region, variable, time, jData, unit, meta) # if in 'IAMC-style' format else: for i in df.index: jData = java.LinkedHashMap() for j in ix.utils.numcols(df): jData.put(java.Integer(int(j)), java.Double(float(df[j][i]))) time = None self._jobj.addTimeseries(df.region[i], df.variable[i], time, jData, df.unit[i], meta)
def _jdouble(val): return java.Double(float(val))
def _jdouble(val): """Returns a Java.Double""" return java.Double(float(val))