2015-04-24 34 views
6

Ho un df che è simile al seguente:Pandas creare nuova colonna con conteggio da groupby

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

Sto cercando di creare un df che assomiglia a questo:

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

ho provato

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

Ma non è proprio quello che sto cercando.

Tutto il consiglio è apprezzato

risposta

17

che non è una nuova colonna, questa è una nuova dataframe:

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

Per ottenere il risultato desiderato è quello di utilizzare reset_index:

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 

Per ottenere una "nuova colonna" che potresti usare trasformare:

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

Consiglio di leggere lo split-apply-combine section of the docs.

+0

Questo è fantastico grazie! Non avevo mai visto la pagina di combinazione split-apply-before. – GNMO11

Problemi correlati