2014-06-27 21 views
5

Ich habe einen Pandas Datenrahmen df. Ich gruppiere es um 3 Spalten und zähle die Ergebnisse. Wenn ich dies tue, verliere ich einige Informationen, insbesondere die Spalte name. Diese Spalte wird 1: 1 mit der Spalte desk_id zugeordnet. Müssen beide in meinen endgültigen Datenrahmen aufgenommen werden?fehlende Spalte nach Pandas groupby

hier ist die Datenrahmen:

shift_id shift_start_time  shift_end_time  name     end_time  desk_id shift_hour 
0 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 10:16:41.040000 15557987   2 
1 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 10:16:41.096000 15557987   2 
2 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 10:52:17.402000 15557987   2 
3 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 11:06:59.083000 15557987   3 
4 37423064 2014-01-17 08:00:00 2014-01-17 12:00:00 Adam Scott 2014-01-17 08:27:57.998000 15557987   0 

I Gruppe es wie folgt aus:

grouped = df.groupby(['desk_id', 'shift_id', 'shift_hour']).size() 
grouped = grouped.reset_index() 

Und hier ist das Ergebnis, die name Spalte fehlt.

desk_id shift_id shift_hour 0 
0 14468690 37729081   0 7 
1 14468690 37729081   1 3 
2 14468690 37729081   2 6 
3 14468690 37729081   3 5 
4 14468690 37729082   0 5 

Auch, um die Zählspalte sowieso als "Anzahl" statt "0" umzubenennen?

Antwort

5

Sie müssen 'name' in groupby von Gruppen umfassen:

In [43]: 

grouped = df.groupby(['desk_id', 'shift_id', 'shift_hour', 'name']).size() 
grouped = grouped.reset_index() 
grouped.columns=np.where(grouped.columns==0, 'count', grouped.columns) #replace the default 0 to 'count' 
print grouped 
    desk_id shift_id shift_hour  name count 
0 15557987 37423064   0 Adam Scott  1 
1 15557987 37423064   2 Adam Scott  3 
2 15557987 37423064   3 Adam Scott  1 

Wenn die Namen-to-id Beziehung ein many-to-one-Typ ist, sagen wir einen pete scott für den gleichen Satz von Daten , das Ergebnis wird:

desk_id shift_id shift_hour  name count 
0 15557987 37423064   0 Adam Scott  1 
1 15557987 37423064   0 Pete Scott  1 
2 15557987 37423064   2 Adam Scott  3 
3 15557987 37423064   2 Pete Scott  3 
4 15557987 37423064   3 Adam Scott  1 
5 15557987 37423064   3 Pete Scott  1 
+0

Gruppierung nach diesem Begriff nicht wieder? Wenn es kein 1: 1-Mapping zwischen 'name' und' desk_id' wäre, würde mir das noch geben, was ich will? – user3439329

+0

Siehe Bearbeiten. Das Ergebnis wird die anderen Namen derselben Desk_id oder shift_id haben. –

+3

Also, wenn ich 'shift_start_time' auch in das Endergebnis aufnehmen wollte. Hinzufügen zu der Groupby-Liste ist in Ordnung? obwohl ich nicht wirklich nach dieser Spalte gruppieren möchte? – user3439329