2013-10-16 39 views
13

Có cách nào để cấu trúc các lệnh Pandas groupby và qcut để trả lại một cột có gạch lồng nhau không? Cụ thể, giả sử tôi có 2 nhóm dữ liệu và tôi muốn qcut áp dụng cho mỗi nhóm và sau đó trả về đầu ra cho một cột. Điều này tương tự với lệnh ntile() của MS SQL Server cho phép phân vùng bằng().Pandas groupby and qcut

 A B C 
0 foo 0.1 1 
1 foo 0.5 2 
2 foo 1.0 3 
3 bar 0.1 1 
4 bar 0.5 2 
5 bar 1.0 3 

Trong dataframe trên Tôi muốn áp dụng các chức năng qcut đến B trong khi phân vùng trên A trở C.

Trả lời

24
import pandas as pd 
df = pd.DataFrame({'A':'foo foo foo bar bar bar'.split(), 
        'B':[0.1, 0.5, 1.0]*2}) 

df['C'] = df.groupby(['A'])['B'].transform(
        lambda x: pd.qcut(x, 3, labels=range(1,4))) 
print(df) 

sản lượng

 A B C 
0 foo 0.1 1 
1 foo 0.5 2 
2 foo 1.0 3 
3 bar 0.1 1 
4 bar 0.5 2 
5 bar 1.0 3 
Các vấn đề liên quan