2015-04-24 30 views
6

Tôi có một df trông giống như sau:Pandas tạo cột mới với số lượng từ groupby

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

tôi đang cố gắng để tạo ra một df trông như thế này:

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

Tôi đã cố gắng

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

Nhưng nó không hoàn toàn là những gì tôi đang tìm kiếm.

Bất kỳ hướng dẫn được đánh giá cao

Trả lời

17

Đó không phải là một cột mới, đó là một DataFrame mới:

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

Để có được kết quả bạn muốn là sử dụng 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 

Để có được "cột mới", bạn có thể sử dụng chuyển đổi:

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

Tôi khuyên bạn nên đọc số split-apply-combine section of the docs.

+0

Điều này thật tuyệt vời! Chưa bao giờ thấy trang kết hợp chia nhỏ áp dụng trước đó. – GNMO11

Các vấn đề liên quan