2016-04-16 4 views
0

Кадры данных Pandas могут быть отсортированы по значениям его столбцов, но я хотел отсортировать кадр данных по значениям ряда, которые я не хочу добавлять в фрейм данных, - хотя он имеет те же самые индексы.Сортировка кадра данных pandas по серии

Я получил свою фрейму данных, отсортированную путем добавления серии к кадру данных (в виде столбца), сортировки и удаления столбца снова. В примере кода nprojnpercent мой кадр данных и total моя серия:

nprojnpercent["total"]=total 
nprojnpercent.sort_values(by="total",ascending=False,inplace=True) 
nprojnpercent.pop("total") 

Это работает, но это, кажется, довольно странно для меня. Есть ли более простой способ упорядочить кадр данных серией?

ответ

0

sort_values возвращает отсортированную серию, поэтому возьмите указатель этого и назовите его idx. Поскольку индекс s соответствует значению df, вы можете использовать loc вместе с idx, чтобы затем упорядочить строки на основе отсортированного значения `s.

np.random.seed(0) 
df = pd.DataFrame(np.random.randn(5,3), columns=list('ABC')) 
s = pd.Series(np.random.randn(5), name='C') 

>>> df 
      A   B   C 
0 1.764052 0.400157 0.978738 
1 2.240893 1.867558 -0.977278 
2 0.950088 -0.151357 -0.103219 
3 0.410599 0.144044 1.454274 
4 0.761038 0.121675 0.443863 

>>> s 
0 0.333674 
1 1.494079 
2 -0.205158 
3 0.313068 
4 -0.854096 
Name: C, dtype: float64 

idx = s.sort_values().index 

>>> df.loc[idx] 
      A   B   C 
4 0.761038 0.121675 0.443863 
2 0.950088 -0.151357 -0.103219 
3 0.410599 0.144044 1.454274 
0 1.764052 0.400157 0.978738 
1 2.240893 1.867558 -0.977278 
Смежные вопросы