Можете ли вы помочь мне с этой путаницей в оси панды? [Дубликат]

В настоящее время нет способа выбрать родительский элемент элемента в CSS.

Если бы был способ сделать это, это было бы в любой из текущих спецификаций селекторов CSS:

Тем временем, вам придется прибегнуть к JavaScript, если вам нужно выбрать родительский элемент.


Рабочий блок для выбора уровня 4 включает псевдокласс класса :has(), который работает аналогично реализации jQuery . По состоянию на 2018 год это все равно не поддерживается никаким браузером .

Используя :has(), исходный вопрос можно было бы решить с помощью этого:

li:has(> a.active) { /* styles to apply to the li tag */ }

146
задан Monit Gehlot 26 October 2016 в 09:18
поделиться

11 ответов

Указывает ось, по которой вычисляются средства. По умолчанию axis=0. Это согласуется с использованием numpy.mean, когда axis указано явно numpy.mean, ось == Нет по умолчанию, которая вычисляет среднее значение по сплющенному массиву), в котором axis=0 вдоль строк (а именно index в пандах) и axis=1 вдоль столбцов . Для большей ясности можно указать axis='index' (вместо axis=0) или axis='columns' (вместо axis=1).

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|----axis=1----->
+------------+---------+--------+
             |         |
             | axis=0  |
             ↓         ↓
240
ответ дан numeratus 20 August 2018 в 13:05
поделиться
  • 1
    Обычно ось = 0 называется «по столбцу», (и ось = 1 "строка-мудрый"), я думаю, что "вдоль строк" вызывает смущение. (Nice «pic», хотя :)) – Andy Hayden 3 March 2014 в 19:43
  • 2
    @AndyHayden да, но, возможно, оба немного запутывают, тем, кто впервые сталкивается с этим;) – zhangxaochen 4 March 2014 в 06:13
  • 3
    Кроме того, причина, по которой axis=0 указывает на объединение по строкам и axis=1, указывает на то, что агрегирование вдоль столбцов происходит из-за того, как вы индексируете в dataframe. В df.iloc[row, column], row находится в позиции индекса 0, а column находится в позиции индекса 1. Numpy обобщает это на N измерений, в которых мышление в терминах оси, которая сворачивается агрегацией начинает иметь больше смысла, чем «строка-мудрый». или "по столбцам". – Tom Q. 18 September 2015 в 16:47
  • 4
    Я все еще чувствую смущение. Если я сделаю df.drop("A", axis = 1), то столбец A будет отброшен. Это не "вдоль строки" ни "строка-мудрый" но опускающийся столбец А. – ytu 23 February 2018 в 05:42
  • 5
    @ytu axis=0 означает, что каждая строка является массой, мы можем манипулировать только интернацией DataFrame вместо внутренней строки. axis=1 означает, что каждый столбец является массовым, мы можем манипулировать только межклассом DataFrame вместо внутреннего столбца. Поэтому, если вы используете df.drop("A", axis = 1), он потеряет целую колонку. – Belter 12 April 2018 в 11:04

Пусть визуализирует (всегда будет помнить),

В Pandas:

  1. axis = 0 означает «индексы». Это пошаговая операция.

Предположим, для выполнения операции concat () на dataframe1 & amp; dataframe2, мы будем принимать dataframe1 & amp; выньте 1-ю строку из dataframe1 и поместите в новый DF, затем мы выберем еще одну строку из dataframe1 и поместим в новый DF, мы повторяем этот процесс, пока не дойдем до нижней части dataframe1. Затем мы делаем один и тот же процесс для dataframe2.

В основном, укладываем dataframe2 поверх dataframe1 или наоборот.

Например, создавая кучу книг на столе или на полу

  1. axis = 1 означает «столбцы». Это операция по столбцам.

Предположим, для выполнения операции concat () в dataframe1 & amp; dataframe2, мы выберем 1-й полный столбец (aka 1-й ряд) dataframe1 и поместим его в новый DF, затем выберем второй столбец dataframe1 и придем к нему рядом (боком), мы должны повторить эту операцию до тех пор, пока все столбцы завершены. Затем мы повторяем тот же процесс на dataframe2. В основном, сбор данных с кадрами2 сбоку.

Например, размещение книг на книжной полке.

6
ответ дан Anubhav 20 August 2018 в 13:05
поделиться
  • 1
    Я думаю, что этот ответ правильный. Вам нужно это визуализировать. ось = 0 (или ось = «строки» - это горизонтальная ось. ось = 1 (или ось = «столбцы») - вертикальная ось. Для дальнейшего использования, если вы используете метод pandas drop, для удаления столбцов или строк, если вы укажете axis = 1, вы будете удалять столбцы. Если вы укажете ось = 0, вы будете удалять строки из набора данных. Поэтому, если у нас есть некоторый фрейм данных pandas в переменной df: df.drop (0, axis = 0) удалит всю первую строку dataset df.drop ('grades', axis = 1) удалит столбцы классов из набора данных. Надеюсь, это еще раз пояснит это ... – Roboblob 12 August 2018 в 10:48

axis = 0 означает, что до оси вниз = 1 означает слева направо

sums[key] = lang_sets[key].iloc[:,1:].sum(axis=0)

В данном примере берется сумма всех данных в столбце ==.

1
ответ дан HeadAndTail 20 August 2018 в 13:05
поделиться

Эти ответы помогают объяснить это, но он по-прежнему не совсем интуитивно понятен для не-программиста (т. е. кто-то вроде меня, который впервые изучает Python в контексте курсовой работы по науке о данных). Я все еще нахожу использование терминов «вдоль» или «для каждого» по отношению к строкам и столбцам, чтобы ввести в заблуждение.

Что для меня больше имеет смысл сказать это так:

  • Ось 0 будет действовать на все ROWS в каждой COLUMN
  • . Ось 1 будет действовать на все COLUMNS в каждом ROW

. Таким образом, среднее значение на оси 0 будет быть средним из всех строк в каждом столбце, а среднее по оси 1 будет означать среднее значение всех столбцов в каждой строке.

В конечном итоге это говорит то же самое, что и @zhangxaochen и @Michael, но тем способом, который мне легче усвоить.

21
ответ дан Ken Wallace 20 August 2018 в 13:05
поделиться

Ось с точки зрения программирования - это положение в кортеже формы. Вот пример:

import numpy as np

a=np.arange(120).reshape(2,3,4,5)

a.shape
Out[3]: (2, 3, 4, 5)

np.sum(a,axis=0).shape
Out[4]: (3, 4, 5)

np.sum(a,axis=1).shape
Out[5]: (2, 4, 5)

np.sum(a,axis=2).shape
Out[6]: (2, 3, 5)

np.sum(a,axis=3).shape
Out[7]: (2, 3, 4)

Среднее значение на оси приведет к удалению измерения.

Ссылаясь на исходный вопрос, форма dff равна (1,2). Использование оси = 1 изменит форму на (1,).

3
ответ дан Mark09 20 August 2018 в 13:05
поделиться

Самый простой способ понять - рассказать, вычисляете ли вы статистику для каждого столбца (axis = 0) или каждой строки (axis = 1). Если вы вычислите статистику, скажем, среднее значение, с axis = 0 вы получите эту статистику для каждого столбца. Поэтому, если каждое наблюдение представляет собой строку, и каждая переменная находится в столбце, вы получите среднее значение для каждой переменной. Если вы установите axis = 1, вы будете рассчитывать свою статистику для каждой строки. В нашем примере вы получите среднее значение для каждого наблюдения по всем вашим переменным (возможно, вы хотите получить среднее значение соответствующих мер).

axis = 0: по столбцу = столбец = вдоль строк

axis = 1: по строке = row-wise = вдоль столбцов

15
ответ дан Michael 20 August 2018 в 13:05
поделиться

Это означает, что он принял среднее значение с использованием каждого столбца, ось = 0 даст вам то, что вы думаете, но ось = 1 дает

 (0.626386+1.52325)/2
 1.075
-7
ответ дан NightHallow 20 August 2018 в 13:05
поделиться
  • 1
    Подумайте, нравится ли вам удаление оси, переданной функции. Таким образом, dff.mean(axis=1) удаляет ось 1 (столбцы) путем агрегирования средней функции над ними. – TomAugspurger 3 March 2014 в 16:51

Мое мышление: Axis = n, где n = 0, 1 и т. д. означает, что матрица свертывается (складывается) вдоль этой оси. Итак, в 2D-матрице, когда вы рушитесь вдоль 0 (строк), вы действительно работаете по одному столбцу за раз. Аналогично для матриц более высокого порядка.

Это не то же самое, что нормальная ссылка на измерение в матрице, где 0 -> строка и 1 -> столбец. Аналогично для других измерений в массиве размерности N.

0
ответ дан Nkrish 20 August 2018 в 13:05
поделиться

Дизайнер панд, Уэс МакКинни, интенсивно работал над финансовыми данными. Подумайте о столбцах как имена акций и индекс, как ежедневные цены. Затем вы можете догадаться, что такое поведение по умолчанию (т. Е. axis=0) в отношении этих финансовых данных. axis=1 можно просто считать «другим направлением».

Например, функции статистики, такие как mean(), sum(), describe(), count(), по умолчанию - мудрый, потому что имеет смысл делать их для каждого запаса. sort_index(by=) также по умолчанию используется столбец. fillna(method='ffill') будет заполняться вдоль столбца, потому что это тот же самый запас. dropna() defaults to row, потому что вы, вероятно, просто хотите отказаться от цены в этот день, а не выбрасывать все цены на этот запас.

Точно так же индексирование квадратных скобок относится к столбцам, поскольку чаще всего выбирается запас вместо того, чтобы выбирать день.

7
ответ дан nos 20 August 2018 в 13:05
поделиться
  • 1
    ваши рассуждения звучат правильно, но означают (), sum () и другие функции по умолчанию (ось = 0), что по ряду причин, а не как указано выше. И, по-видимому, по-дурацки ведут себя так, как мы ожидаем, что по столбцам :) и это кажется путаницей. – bincob 11 March 2017 в 10:04

axis относится к размерности массива, в случае pd.DataFrame s axis=0 - это размер, который указывает вниз, а axis=1 - тот, который указывает справа.

Пример: подумайте о ndarray с формой (3,5,7).

a = np.ones((3,5,7))

a является трехмерным ndarray, то есть имеет 3 оси («оси» являются множественными «осью»). Конфигурация a будет выглядеть как 3 ломтика хлеба, где каждый срез имеет размер 5 на 7. a[0,:,:] будет ссылаться на 0-й срез, a[1,:,:] будет ссылаться на 1-й срез и т. д.

a.sum(axis=0) применит sum() вдоль 0-й оси a , Вы добавите все фрагменты и получите один фрагмент формы (5,7).

a.sum(axis=0) эквивалентен

b = np.zeros((5,7))
for i in range(5):
    for j in range(7):
        b[i,j] += a[:,i,j].sum()

b и a.sum(axis=0) будет оба выглядите так

array([[ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.],
       [ 3.,  3.,  3.,  3.,  3.,  3.,  3.]])

В pd.DataFrame оси работают так же, как в numpy.array s: axis=0 применит sum() или любую другую функцию сокращения для каждого столбца.

N.B. В ответе @ zhangxaochen я нахожу фразы «вдоль рядов» и «вдоль столбцов» немного запутанными. axis=0 следует ссылаться на «вдоль каждого столбца» и axis=1 «вдоль каждой строки».

20
ответ дан Safak Ozkan 20 August 2018 в 13:05
поделиться

Массивы сконструированы с так называемой осью = 0 и строками, расположенными вертикально относительно оси = 1 и столбцами, расположенными горизонтально. Ось относится к размерности массива. Illustration [/g0]

-2
ответ дан sorak 20 August 2018 в 13:05
поделиться
  • 1
    axis=0 означает, что каждая строка является массой, мы можем манипулировать только интернацией DataFrame вместо внутренней строки. axis=1 означает, что каждый столбец является массовым, мы можем манипулировать только межклассом DataFrame вместо внутреннего столбца. – Belter 12 April 2018 в 11:02
  • 2
    Разве это не совсем так, как утверждают почти все другие описания на этой странице (и в соответствии с быстрым тестом с пандами в Юпитере)? – Marc Liyanage 25 April 2018 в 21:44
Другие вопросы по тегам:

Похожие вопросы: