2017-10-04 4 views
1

Ich habe einen Datenrahmen mit Werten pro Tag (siehe df unten). Ich möchte das Feld "Prognose" pro Woche gruppieren, aber Montag als ersten Tag der Woche.Gruppe Python Pandas Datenrahmen pro Woche (beginnend am Montag)

Zur Zeit kann ich es über pd.TimeGrouper tun ('W') (siehe df_final unten), aber es Gruppen die Woche am Sonntag beginnen (siehe df_final unten)

import pandas as pd 
data = [("W1","G1",1234,pd.to_datetime("2015-07-1"),8), 
     ("W1","G1",1234,pd.to_datetime("2015-07-30"),2), 
     ("W1","G1",1234,pd.to_datetime("2015-07-15"),2), 
     ("W1","G1",1234,pd.to_datetime("2015-07-2"),4), 
     ("W1","G2",2345,pd.to_datetime("2015-07-5"),5), 
     ("W1","G2",2345,pd.to_datetime("2015-07-7"),1), 
     ("W1","G2",2345,pd.to_datetime("2015-07-9"),1), 
     ("W1","G2",2345,pd.to_datetime("2015-07-11"),3)] 

labels = ["Site","Type","Product","Date","Forecast"] 
df = pd.DataFrame(data,columns=labels).set_index(["Site","Type","Product","Date"]) 
df 


           Forecast 
Site Type Product Date     
W1 G1 1234 2015-07-01   8 
        2015-07-30   2 
        2015-07-15   2 
        2015-07-02   4 
    G2 2345 2015-07-05   5 
        2015-07-07   1 
        2015-07-09   1 
        2015-07-11   3 



df_final = (df 
    .reset_index() 
    .set_index("Date") 
    .groupby(["Site","Product",pd.TimeGrouper('W')])["Forecast"].sum() 
    .astype(int) 
    .reset_index()) 
df_final["DayOfWeek"] = df_final["Date"].dt.dayofweek 
df_final 

    Site Product  Date Forecast DayOfWeek 
0 W1  1234 2015-07-05  12   6 
1 W1  1234 2015-07-19   2   6 
2 W1  1234 2015-08-02   2   6 
3 W1  2345 2015-07-05   5   6 
4 W1  2345 2015-07-12   5   6 
+0

Ich denke 'W-MON' statt' W' sollte helfen. – jezrael

Antwort

1

Verwenden W-MON statt W, überprüft anchored offsets :

df_final = (df 
    .reset_index() 
    .set_index("Date") 
    .groupby(["Site","Product",pd.TimeGrouper('W-MON')])["Forecast"].sum() 
    .astype(int) 
    .reset_index()) 
df_final["DayOfWeek"] = df_final["Date"].dt.dayofweek 
print (df_final) 
    Site Product  Date Forecast DayOfWeek 
0 W1  1234 2015-07-06  12   0 
1 W1  1234 2015-07-20   2   0 
2 W1  1234 2015-08-03   2   0 
3 W1  2345 2015-07-06   5   0 
4 W1  2345 2015-07-13   5   0 
Verwandte Themen