2015-04-24 17 views
6

mam df, który wygląda tak:Pandy utworzyć nową kolumnę z liczbą od GroupBy

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

Próbuję utworzyć df, który wygląda tak:

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

Próbowałem

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

Ale to nie jest dokładnie to, czego szukam.

Wszelkie wskazówki jest doceniana

Odpowiedz

17

to nie jest nowa kolumna, to nowa DataFrame:

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

Aby uzyskać wynik, który chcesz jest użycie 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 

Aby dostać "nowa kolumna", której można użyć przekształcić:

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

Polecam lekturę split-apply-combine section of the docs.

+0

To wielkie dzięki! Nigdy wcześniej nie widziałem strony z podziałem-stosuj-połącz. – GNMO11

Powiązane problemy