2015-07-10 119 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