2015-04-24 12 views
6

Ich habe einen df, die wie folgt aussieht:Pandas schaffen neue Spalte mit Zählung von groupby

id  item  color 
01  truck  red 
02  truck  red 
03  car   black 
04  truck  blue 
05  car   black 

Ich versuche, eine df zu erstellen, die wie folgt aussieht:

item  color  count 
truck  red   2 
truck  blue   1 
car  black  2 

ich versucht habe,

df["count"] = df.groupby("item")["color"].transform('count') 

Aber es ist nicht ganz das, was ich suche.

ist Jede mögliche Anleitung

Antwort

17

versteht sich, dass nicht eine neue Spalte ist, ist, dass ein neuer Datenrahmen:

In [11]: df.groupby(["item", "color"]).count() 
Out[11]: 
      id 
item color 
car black 2 
truck blue 1 
     red  2 

das gewünschte Ergebnis zu erhalten, ist reset_index zu verwenden: Lassen Sie sich bei

In [12]: df.groupby(["item", "color"])["id"].count().reset_index(name="count") 
Out[12]: 
    item color count 
0 car black  2 
1 truck blue  1 
2 truck red  2 

eine "neue Spalte" könnte man verwenden:

In [13]: df.groupby(["item", "color"])["id"].transform("count") 
Out[13]: 
0 2 
1 2 
2 2 
3 1 
4 2 
dtype: int64 

Ich empfehle das Lesen der split-apply-combine section of the docs.

+0

Das ist super danke! Hatte die Split-Apply-Combine-Seite noch nie zuvor gesehen. – GNMO11

Verwandte Themen