2016-07-25 86 views
1

排名數據幀。如果我有這樣一個數據幀的如何通過分組

col1 col2 col3 
0 x1 typeA  3 
1 x2 typeB 13 
2 x3 typeB  3 
3 x4 typeA  5 
4 x5 typeB  1 
5 x6 typeA  1 

有通過COL3在COL2每種居行的方法嗎?例如,此解決方案看起來像

col1 col2 col3 rank 
0 x1 typeA  3 2 
1 x2 typeB 13 1 
2 x3 typeB  3 2 
3 x4 typeA  5 1 
4 x5 typeB  1 3 
5 x6 typeA  1 3 

回答

1

transform保持與原始數據框相同的形狀。然後用lambda功能基於從col2分組排名col3 ..

df['col4'] = df.groupby('col2').col3.transform(lambda group: group.rank()) 

>>> df 
    col1 col2 col3 col4 
0 x1 typeA  3  2 
1 x2 typeB 13  3 
2 x3 typeB  3  2 
3 x4 typeA  5  3 
4 x5 typeB  1  1 
5 x6 typeA  1  1 
+0

我認爲它可以在不lambda函數來完成:'.groupby(「COL2」)col3.transform(「級別」)astype (np.int8)' – MaxU

+0

@MaxU我也試過,但結果不一樣。 – Alexander

+0

哎呀!我沒有注意到...抱歉... – MaxU