2013-10-16 199 views
13

有沒有一種方法來構造熊貓groupby和qcut命令返回一個嵌套瓷磚的列?具體來說,假設我有兩組數據,並且我希望將qcut應用於每個組,然後將輸出返回到一列。這將與允許通過()分區的MS SQL Server的ntile()命令類似。熊貓groupby和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 

在數據幀以上我想的qcut函數應用於乙而上的分隔返回C.

回答

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) 

產量

 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