Dividir marcos de datos en grupos y subgrupos y almacenar la salida en un archivo CSV

Supongamos que tengo un gran marco de datos como este:

A                     B      C
27/6/2017 4:00:00   928.04  4.83
27/6/2017 4:20:00   927.71  4.61
27/6/2017 4:40:00   928.22  4.49
27/6/2017 5:00:00   898.74  3.81
27/6/2017 5:20:00   895.16  3.55
27/6/2017 5:40:00   895.05  3.4
27/6/2017 6:00:00   895.68  3.3
27/6/2017 16:20:00  662.45  1.52
27/6/2017 16:40:00  639.98  1.48
27/6/2017 17:40:00  732.02  1.79
27/6/2017 18:00:00  722.63  1.98
27/6/2017 18:20:00  713.26  1.79
27/6/2017 18:40:00  705.8   1.54
27/6/2017 19:00:00  652.1   1.51
27/6/2017 19:20:00  638.58  1.68
27/6/2017 19:40:00  633.14  1.66
27/6/2017 20:00:00  654.66  1.45

Quiero dividir el marco de datos en función de la diferencia de horas, es decir, si la diferencia entre dos marcas de tiempo es más de 4 horas, dividirá el marco de datos. Luego quiero dividir esos dos marcos de datos en subgrupos sobre la base del rango de valores de B. Quiero almacenar todos esos grupos y subgrupos en un archivo csv individual.

Salida deseada:

Grupo 1:

A                     B      C
27/6/2017 4:00:00   928.04  4.83
27/6/2017 4:20:00   927.71  4.61
27/6/2017 4:40:00   928.22  4.49
27/6/2017 5:00:00   898.74  3.81
27/6/2017 5:20:00   895.16  3.55
27/6/2017 5:40:00   895.05  3.4
27/6/2017 6:00:00   895.68  3.3

Grupo 2:

A                     B      C
27/6/2017 16:20:00  662.45  1.52
27/6/2017 16:40:00  639.98  1.48
27/6/2017 17:40:00  732.02  1.79
27/6/2017 18:00:00  722.63  1.98
27/6/2017 18:20:00  713.26  1.79
27/6/2017 18:40:00  705.8   1.54
27/6/2017 19:00:00  652.1   1.51
27/6/2017 19:20:00  638.58  1.68
27/6/2017 19:40:00  633.14  1.66
27/6/2017 20:00:00  654.66  1.45

Zonas:

Grupo1 Zona1:

A                     B      C
27/6/2017 4:00:00   928.04  4.83
27/6/2017 4:20:00   927.71  4.61
27/6/2017 4:40:00   928.22  4.49

GRUPO1 ZOne2:

A                     B      C
27/6/2017 5:00:00   898.74  3.81
27/6/2017 5:20:00   895.16  3.55
27/6/2017 5:40:00   895.05  3.4
27/6/2017 6:00:00   895.68  3.3

Me gusta esto.

He intentado algunas lógicas para lograr esto, pero no pude hacerlo.

Código:

time_diff = df["Time"].diff()

zones = []
dfs = DataFrame

zone = (dfs["Time"] >= (dfs["Time"].shift() + time_diff[1]*12)).cumsum()
zone_grp = dfs.groupby(zone)

xyz = []
for k,g in zone_grp:
    if len(g) >= 30:
        zones.append(g)
    else:
        pass
for m in range(len(zones)):
    zone_df = DataFrame(zones[m])
    x = range(len(zone_df))
    y = zone_df["T401FN1VT4000"]

    abc = Series((linregress(x,y)))
    abc = DataFrame(abc).T
    slope = abc[0].tolist()
    intercept = abc[1].tolist()
    abc = DataFrame({"Slope":slope,"Intercept":intercept})
    xyz.append(abc)
    zone_df.to_csv("Zone_%s.csv" %m, index = False)

xyz = concat(xyz).reset_index()
del xyz["index"]
xyz["Zone"] = xyz.index
xyz = xyz.set_index("Zone")
xyz.to_csv("Coefficients.csv", index = True)

Ayúdame a dividir el marco de datos en función de la diferencia horaria de una mejor manera y ayúdame a almacenar los grupos y subgrupos en archivos csv con diferentes nombres.

Cualquier ayuda sería apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta