Source code for vtools.functions.example2

[docs] def main(): import pandas as pd import numpy as np tndx = pd.DatetimeIndex( [ "2019-01-04 00:00", "2019-01-04 03:00", "2019-01-04 10:17", "2019-01-04 19:00", "2019-01-05 09:00", "2019-01-06 10:00", "2019-01-07 16:00", "2019-01-09 14:50", ] ) data = { "op": ["a", "a", "b", "b", "b", np.nan, np.nan, np.nan], "setting": [1.0, 2.0, 1.0, np.nan, np.nan, 2.0, 1.0, 1.0], } df = pd.DataFrame(data=data, index=tndx) miss = df.setting.isna() g = miss.ne(miss.shift()).cumsum() print(g) elapsed = (df.index - df.index[0]).total_seconds() / 60.0 print(elapsed) print((np.diff(elapsed) + [0])) df["per"] = 0.0 df.loc[0:-1, "per"] = np.diff(elapsed) print(df) df2 = df.groupby(g).sum() print(df2) s = df.index.to_series() cols = ["op", "setting"] for c in cols: miss = df[c].isna() g = miss.ne(miss.shift()).cumsum() m1 = s.groupby(g).min() m2 = m1.shift(-1).fillna(df.index[-1]) out = m2.sub(m1).dt.total_seconds().div(60).astype(int) df[c] = g.map(out) print(df)
if __name__ == "__main__": main()