2015-10-21 21 views

Trả lời

41

Bạn có thể sử dụng groupby của size:

In [11]: df.groupby(["Group", "Size"]).size() 
Out[11]: 
Group  Size 
Moderate Medium 1 
      Small  1 
Short  Small  2 
Tall  Large  1 
dtype: int64 

In [12]: df.groupby(["Group", "Size"]).size().reset_index(name="Time") 
Out[12]: 
     Group Size Time 
0 Moderate Medium  1 
1 Moderate Small  1 
2  Short Small  2 
3  Tall Large  1 
+0

Cảm ơn. Một bổ sung nhỏ để chọn các giá trị k (= 20) hàng đầu dựa trên tần suất ("Thời gian"): df.groupby (["Nhóm", "Kích thước"]). Size(). Reset_index (name = "Time") .sort_values ​​(by = 'Time', tăng dần = False) .head (20); –

10

Bạn cũng có thể thử pd.crosstab()

Group   Size 

Short   Small 
Short   Small 
Moderate  Medium 
Moderate  Small 
Tall   Large 

pd.crosstab(df.Group,df.Size) 


Size  Large Medium Small 
Group       
Moderate  0  1  1 
Short   0  0  2 
Tall   1  0  0 

EDIT: Để thoát khỏi bạn đặt

pd.crosstab(df.Group,df.Size).replace(0,np.nan).\ 
    stack().reset_index().rename(columns={0:'Time'}) 
Out[591]: 
     Group Size Time 
0 Moderate Medium 1.0 
1 Moderate Small 1.0 
2  Short Small 2.0 
3  Tall Large 1.0 
+1

đẹp. bạn thậm chí có thể thêm 'margins = True' để có được số lượng cận biên! –

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