Ответ 1
Используйте sort_values
, то есть means = means.sort_values()
. [Панды v0. 17+]
(Очень старый ответ, до v0.17/2015)
Панды использовали метод order()
: means = means.order()
.
Я пытаюсь понять, как правильно сортировать Серии, сгенерированные в результате групповой агрегации.
Я генерирую агрегацию моего DataFrame следующим образом:
means = df.testColumn.groupby(df.testCategory).mean()
Это приводит к серии. Я сейчас пытаюсь отсортировать это по значению, но получаю ошибку:
means.sort()
...
-> Exception: This Series is a view of some other array, to sort in-place you must create a copy
Затем я пытаюсь создать копию:
meansCopy = Series(means)
meansCopy.sort()
-> Exception: This Series is a view of some other array, to sort in-place you must create a copy
Как я могу заставить этот вид работать?
Используйте sort_values
, то есть means = means.sort_values()
. [Панды v0. 17+]
Панды использовали метод order()
: means = means.order()
.
Series.sort_values()
# Setup.
np.random.seed(0)
df = pd.DataFrame({'A': list('aaabbbbccddd'), 'B': np.random.choice(5, 12)})
ser = df.groupby('A')['B'].mean()
ser
A
a 2.333333
b 2.500000
c 3.000000
d 1.333333
Name: B, dtype: float64
ser.sort_values()
A
d 1.333333
a 2.333333
b 2.500000
c 3.000000
Name: B, dtype: float64
sort_values(ascending=False)
Series.argsort()
и выполнить повторную индексацию с помощью __getitem__
/Series.iloc
:ser[ser.argsort()]
A
d 1.333333
a 2.333333
b 2.500000
c 3.000000
Name: B, dtype: float64
ser.iloc[ser.argsort()]
A
d 1.333333
a 2.333333
b 2.500000
c 3.000000
Name: B, dtype: float64
numpy.argsort()
(должно быть немного быстрее):ser[np.argsort(ser)]
# ser[np.argsort(ser.values)]
A
d 1.333333
a 2.333333
b 2.500000
c 3.000000
Name: B, dtype: float64
ser[(-ser).argsort()]
A
c 3.000000
b 2.500000
a 2.333333
d 1.333333
Name: B, dtype: float64
Процесс аналогичен другим аналогичным методам.
np.sort
:np.sort(ser)
# array([1.33333333, 2.33333333, 2.5 , 3. ])
.sort()
на ser.values
) возможна, но не рекомендуется:ser.values.sort()
будет сортировать значения ряда на месте, но не будет изменять индекс, поэтому технически это неверно.
[Старые методы до v0.17/2015: order
, sort
, sortUp
, sortDown
устарели]