2015-07-10 122 views
0

我有这样一个数据帧:熊猫:行数为列值的基础上排序数据帧

a b 
1 2 
3 2 
2 3 
6 3 
7 3 
5 4 

我要排序的行数的基础上,该数据帧对于B 值输出:

a b 
2 3 
6 3 
7 3 
1 2 
3 2 
5 4 

任何可能的一个这样的衬垫?

+0

我从来没有用过熊猫,但是有可能做类似'df.reindex_axis(sorted(df.rows,key = some_function),axis = 0)'? (不,我不知道为什么我要回答一个我一无所知的问题)。 – Sam

回答

1

您可以按照一个临时列(实际上,与单个列一个数据帧,因为排序系列可能会导致一些稳定岬问题)创建基于价值数以及指数对结果的原始数据帧:

print df.loc[df[['b']].replace(df.b.value_counts().to_dict()).sort('b', ascending=False).index] 

输出:

a b 
2 2 3 
3 6 3 
4 7 3 
0 1 2 
1 3 2 
5 5 4 
+0

感谢ton @ YS-L,它的工作原理.... –

1

您可以使用GROUPBY:

import pandas as pd  
df = pd.DataFrame({'a':[1,3,2,6,7,5], 'b':[2,2,3,3,3,4]}) 
df.ix[df.groupby('b')[['b']].transform(len).sort('b', ascending=[0]).index] 

a b 
2 2 3 
3 6 3 
4 7 3 
0 1 2 
1 3 2 
5 5 4