2016-05-02 6 views
0

Mit citibike Daten: https://s3.amazonaws.com/tripdata/index.htmlPython: GROUPBY Stunde ist Nullwerte

tripduration starttime stoptime start_station_id start_station_name start_station_latitude start_station_longitude end_station_id end_station_name end_station_latitude end_station_longitude bikeid usertype birth_year gender 
461 2016-02-01 00:00:08 2016-02-01 00:07:49 480 W 53 St & 10 Ave 40.766697 -73.990617 524 W 43 St & 6 Ave 40.755273 -73.983169 23292 Subscriber 1966.0 1 
297 2016-02-01 00:00:56 2016-02-01 00:05:53 463 9 Ave & W 16 St 40.742065 -74.004432 380 W 4 St & 7 Ave S 40.734011 -74.002939 15329 Subscriber 1977.0 1 
280 2016-02-01 00:01:00 2016-02-01 00:05:40 3134 3 Ave & E 62 St 40.763126 -73.965269 3141 1 Ave & E 68 St 40.765005 -73.958185 22927 Subscriber 1987.0 1 

Mit der GROUPBY Funktion Gruppierung von Stunde, würde Ich mag auf Nullwert als Null ist.

habe ich den folgenden Code:

bikes_parked = df.groupby(['end_station_name',pd.Grouper(key='stoptime',freq='H')]).size().reset_index() 
bikes_parked.rename(columns={0: 'bikes_parked'},inplace=True) 

Welche Anzahl von Fahrrädern durch die Stunde geparkt zurückgekehrt, aber für die Stunden, die Daten nicht hatte übersprungen es.

Ausgang:

end_station_name stoptime    bikes_parked 
0 1 Ave & E 15 St  2016-02-01 00:00:00 1 
1 1 Ave & E 15 St  2016-02-01 05:00:00 1 
2 1 Ave & E 15 St  2016-02-01 06:00:00 3 

I Nachlauf 01 aufgenommen werden soll, 02, 03, 04 mit als auch bikes_parked als 0.

+1

Können Sie eine kleine Teilmenge von Daten teilen, mit denen Sie arbeiten? Probieren Sie eine 'df = df.fillna (0)' vor 'groupby'. – user666

+0

Sie haben keine zusätzlichen Einschränkungen? Willst du nur Nas mit Null füllen? Dann 'bikes_parked = df.fillna (0) .groupby ([...' sollte funktionieren. – ayhan

+0

@ayhan - Entschuldigung, dass ich die Originaldaten nicht berücksichtigt habe. Df enthält nur Stoptime wenn eine Reise beendet ist. Also fillna (0) on df hat nicht funktioniert, weil es keine na - Werte gab. –

Antwort

0

Wie in den Kommentaren erwähnt, ist die Lösung als solche:

1) Erstellen Sie einen Datenrahmen mit einer vollständigen Palette von Stunden, alle auf bikes_parked=0

2) Aktualisieren dieses DF mit den relevanten Daten aus die gruppierte Tabelle mit:

df.loc[bikes_parked.index, 'bikes_parked'] = bikes_parked.bikes_parked