2016-07-25 59 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