Что означает ось в пандах?

269

Вот мой код для генерации кадра данных:

import pandas as pd
import numpy as np

dff = pd.DataFrame(np.random.randn(1,2),columns=list('AB'))

тогда я получил датафрейм:

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|
+------------+---------+--------+

Когда я набираю команду:

dff.mean(axis=1)

Я получил :

0    1.074821
dtype: float64

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

A    0.626386
B    1.523255
dtype: float64

Итак, вот мой вопрос: что означает ось в пандах?

jerry_sjtu
источник

Ответы:

382

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

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|----axis=1----->
+------------+---------+--------+
             |         |
             | axis=0  |
                      
zhangxaochen
источник
164
Обычно ось = 0 называется «по столбцам» (а ось = 1 «по строкам»), я думаю, что «по строкам» сбивает с толку. (Хорошая "картинка", хотя :))
Энди Хейден
11
@AndyHayden да, но, возможно, оба немного сбивают с толку тех, кто впервые сталкивался с этим;)
zhangxaochen
43
Кроме того, причина, по которой axis=0агрегируется по строкам и axis=1агрегируется по столбцам, заключается в том, как вы индексируете в фрейм данных. In df.iloc[row, column], rowнаходится в позиции индекса 0 и columnв позиции индекса 1. Numpy обобщает это на N измерений, в которых размышления с точки зрения оси, в которой происходит агрегация агрегации, начинают иметь больше смысла, чем «по строкам» или «по столбцам». ».
Том Q.
11
Я все еще смущаюсь. Если я это сделаю, столбецdf.drop("A", axis = 1) A будет удален. Это не «по ряду» и не «по ряду», а отбрасывание столбца А.
ytu
5
@ytu axis=0означает каждую строку как массив, мы можем манипулировать только между строками DataFrame вместо внутренней строки. axis=1означает каждый столбец как массив, мы можем манипулировать только внутренним столбцом DataFrame вместо внутреннего столбца. Так что, если вы используете df.drop("A", axis = 1), он уронит целый столбец.
Бельтер
106

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

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

  • Ось 0 будет действовать на все ряды в каждой колонне
  • Ось 1 будет действовать на все КОЛОННЫ в каждом ряду

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

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

Кен Уоллес
источник
Я думаю, что путаница происходит от сложности каждого так называемого «акта». df.dropna (axis = 0) сначала проверит все КОЛОННЫ в каждой строке, а затем сбросит эти строки с нулем. Ось говорит о последнем шаге, но наш мозг сосредоточится на первой части.
Шон Чен
69

Давайте представим (вы будете помнить всегда), введите описание изображения здесь

В Пандах:

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

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

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

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

  1. Ось = 1 означает вдоль "столбцов". Это операция по столбцам.

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

Например, расставляя книги на книжной полке.

Более того, поскольку массивы являются лучшими представлениями для представления вложенной n-мерной структуры по сравнению с матрицами! поэтому ниже может помочь вам более наглядно представить, как ось играет важную роль, когда вы обобщаете в более чем одно измерение. Кроме того, вы можете фактически напечатать / записать / нарисовать / визуализировать любой массив n-dim, но на бумаге более 3-х измерений невозможно написание или визуализация одного и того же в матричном представлении (3-dim).

введите описание изображения здесь

Ана
источник
6
Я думаю, что этот ответ правильный. Вы должны визуализировать это. Ось = 0 (или ось = 'строки' - горизонтальная ось. ось = 1 (или ось = 'столбцы') - вертикальная ось. Чтобы продвинуться дальше, если вы используете метод удаления панд, удалить столбцы или строки, если вы укажете axis = 1 вы будете удалять столбцы. Если вы укажете axis = 0, вы будете удалять строки из набора данных. Поэтому, если у нас есть некоторый pandas-массив данных в переменной df: df.drop (0, axis = 0) удалит всю первую строку набора данных df.drop ('grades', axis = 1) удалит столбцы 'grades' из набора данных. Надеюсь, это прояснит это немного подробнее ...
Roboblob
3
@Roboblob - все еще сбивает с толку. df.drop (n, axis = 1) действует на столбец. Почему df.mean (axis = 1) не выполняет действия со столбцом?
Мэтти
@matty, первый! руки грязные! Для справки: drop & mean , axis = 1 одинаково для обоих, задайте новый вопрос, если вы что-то не поняли в своем примере!
Ана
2
@anu - руки грязные? Нам не нужно загромождать ТАК двойными вопросами. Я уверен, что один или несколько ответов на этой странице можно уточнить, чтобы уменьшить эту путаницу. Я бы сделал это сам, если бы мог, но сейчас я знаю, как их использовать. Я понимаю, какую ось использовать для получения нужных мне данных. Однако остается путаница относительно того, почему mean () и drop () чувствуют, что они влияют на противоположные оси.
Мэтти
2
Боюсь, этот ответ невероятно запутан. Вы говорите о действии в строках как оси = 0, но рисуете красные стрелки, идущие по столбцам. Вы говорите об оси = 1, действующей на столбцы, но рисуете стрелки, проходящие через ряд. Тот, кто придумал эту систему, не очень хорошо продумал ее.
rockNwaves
33

axisотносится к измерению массива, в случае pd.DataFrames 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.]])

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

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

Сафак Озкан
источник
1
Это лучший ответ, чем принятый - поскольку, как упоминает Сафак, используемые здесь фразы сформулированы плохо и приводят к еще большей путанице.
Джавадба
Это лучший ответ
Ravi G
24

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

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

axis = 1: по ряду = по рядам = вдоль столбцов

Майкл
источник
Я думаю, что «вместе» следует заменить на «поперек». Идти по чему-то (например, по дороге) для меня означает оставаться на нем, но при этом axis=0мы не остаемся в ряду, когда, скажем, вычисляем среднее; скорее мы проходим все строки в столбце.
Смущен
13

Давайте посмотрим на таблицу из вики. Это оценка МВФ ВВП с 2010 по 2019 год для десяти стран. введите описание изображения здесь

1. Ось 1 будет действовать для каждой строки на всех столбцов
Если вы хотите , чтобы вычислить среднее (среднее) ВВП для каждой страны за десятилетие (2010-2019 годы), что вам нужно сделать, df.mean(axis=1). Например, если вы хотите рассчитать средний ВВП США с 2010 по 2019 год,df.loc['United States','2010':'2019'].mean(axis=1)

2. Ось 0 будет действовать для каждого столбца по всем строкам
Если я хочу , чтобы вычислить среднее (среднее) ВВП за каждый год для всех стран, что вам нужно сделать, df.mean(axis=0). Например, если вы хотите рассчитать средний ВВП 2015 года для США, Китая, Японии, Германии и Индии, df.loc['United States':'India','2015'].mean(axis=0)

обратите внимание: приведенный выше код будет работать только после установки столбца «Страна (или зависимая территория)» в качестве индекса с использованием set_indexметод.

Сумит Похрел
источник
11

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

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,).

Mark09
источник
8

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

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

Аналогично, индексирование в квадратных скобках относится к столбцам, так как чаще выбирают акции, а не выбирают день.

н.у.к.
источник
1
Ваши рассуждения звучат правильно, но по умолчанию (смысле (), сумма () и другие функции по умолчанию (ось = 0) расположены по строкам, а не так, как указано выше). И построчно, кажется, ведет себя так, как мы ожидаем по столбцам :), и это, кажется, путаница.
bincob
5

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

  • если вы ожидаете вывод для каждой строки вы используете axis = 'columns',
  • с другой стороны, если вы хотите вывод для каждого столбца, вы используете axis = 'lines'.
yosemite_k
источник
Спасибо. Это, однако, работает только для вычисления правильно? Это не будет работать для таких методов, как pd.concatили df.dropna(), которые используют ось Kewarg в большей степени идентификации.
Боуэн Лю
3

Проблема axis=правильного использования заключается в его использовании в двух основных случаях:

  1. Для вычисления накопленного значения или переупорядочения (например, сортировки) данных.
  2. Для манипулирования («игры») объектами (например, кадрами данных ).

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

Pandas основан на NumPy, который основан на математике, особенно на n-мерных матрицах. Вот изображение для общего использования имен осей в математике в трехмерном пространстве:

введите описание изображения здесь Это изображение для запоминания только порядковых номеров осей :

  • 0 для оси х,
  • 1 для оси Y и
  • 2 для оси Z.

Ось г только для панелей ; для фреймов данных мы ограничим наш интерес двумерной базовой плоскостью зеленого цвета с осью X (по 0вертикали) и осью Y (по 1горизонтали).

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

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

А теперь мой совет:

  1. Если вы хотите вычислить накопленное значение , вы можете вычислить его из значений, расположенных вдоль оси 0 (или вдоль оси 1 ) - используйте axis=0(или axis=1).

    Точно так же, если вы хотите переставить значения , используйте номер оси оси, вдоль которой расположены данные для переупорядочения (например, для сортировки ).

  2. Если вы хотите манипулировать (например, объединять ) объектами (например, кадрами данных ) - используйте axis='index'(synonym:) axis='rows'или axis='columns'укажите результирующее изменение - индекс ( строки ) или столбцы , соответственно.
    (Для объединения вы получите либо более длинный индекс (= больше строк) , либо больше столбцов соответственно.)

MarianD
источник
это самый лучший ответ, и, вероятно, должен быть помечен как правильный ответ операцией!
Anze
2

Это основано на ответе @ Safak. Лучший способ понять оси в pandas / numpy - создать трехмерный массив и проверить результат функции суммы по 3 различным осям.

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

будет:

    array([[[1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.]],

   [[1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.]],

   [[1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.],
    [1., 1., 1., 1., 1., 1., 1.]]])

Теперь проверим сумму элементов массива по каждой из осей:

 x0 = np.sum(a,axis=0)
 x1 = np.sum(a,axis=1)
 x2 = np.sum(a,axis=2)

даст вам следующие результаты:

   x0 :
   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.]])

   x1 : 
   array([[5., 5., 5., 5., 5., 5., 5.],
   [5., 5., 5., 5., 5., 5., 5.],
   [5., 5., 5., 5., 5., 5., 5.]])

  x2 :
   array([[7., 7., 7., 7., 7.],
        [7., 7., 7., 7., 7.],
        [7., 7., 7., 7., 7.]])
missnomer
источник
2

Я так понимаю

Скажем, если ваша операция требует перемещения слева направо / справа налево в кадре данных, вы, очевидно, объединяете столбцы, т.е. вы работаете на разных колонках. Это ось = 1

пример

df = pd.DataFrame(np.arange(12).reshape(3,4),columns=['A', 'B', 'C', 'D'])
print(df)
   A  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11 

df.mean(axis=1)

0    1.5
1    5.5
2    9.5
dtype: float64

df.drop(['A','B'],axis=1,inplace=True)

    C   D
0   2   3
1   6   7
2  10  11

Обратите внимание, что мы работаем над колоннами

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

Абхишек Радж
источник
1

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

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

Данный пример берет сумму всех данных в столбце == ключ.

HeadAndTail
источник
0

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

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

Nkrish
источник
0

Я новичок в пандах. Но вот как я понимаю ось в пандах:


Постоянная ось, изменяющееся направление


0 Столбец Строка Вниз |


1 рядная колонна направо ->


Таким образом, чтобы вычислить среднее значение столбца, этот конкретный столбец должен быть постоянным, но строки под ним могут меняться ( изменяться ), поэтому его ось = 0.

Точно так же, чтобы вычислить среднее значение строки, эта конкретная строка является константой, но она может проходить через разные столбцы (разные) , ось = 1.

Харшана Шридхар
источник
0

Я думаю, что есть другой способ понять это.

Для np.array, если мы хотим исключить столбцы, мы используем axis = 1; если мы хотим исключить строки, мы используем axis = 0.

np.mean(np.array(np.ones(shape=(3,5,10))),axis = 0).shape # (5,10)
np.mean(np.array(np.ones(shape=(3,5,10))),axis = 1).shape # (3,10)
np.mean(np.array(np.ones(shape=(3,5,10))),axis = (0,1)).shape # (10,)

Для объекта «Панды» axis = 0обозначает построчную операцию и axis = 1колонную операцию. Это отличается от numpyопределения, мы можем проверить определения из numpy.doc и pandas.doc

Travis
источник
0

Я буду явно избегать использования «построчно» или «вдоль столбцов», так как люди могут интерпретировать их совершенно неправильно.

Сначала аналогия. Интуитивно, вы можете ожидать, что pandas.DataFrame.drop(axis='column')удалит столбец из N столбцов и даст вам (N - 1) столбцов. Таким образом, вы можете не обращать внимания на строки на данный момент (и удалить слово 'row' из своего английского словаря). И наоборот, drop(axis='row')работает со строками.

Таким же образом, sum(axis='column')работает на нескольких столбцах и дает вам 1 столбец. Аналогично, sum(axis='row')результаты в 1 строке. Это согласуется с его самой простой формой определения, сводящей список чисел к одному числу.

В общем, axis=columnвы видите столбцы, работаете со столбцами и получаете столбцы. Забудьте строки.

С помощью axis=rowменяйте перспективу и работайте над строками.

0 и 1 - это просто псевдонимы для строк и столбцов. Это соглашение о матричной индексации.

lqu
источник
Это неверное толкование: ось = столбцы не дает столбцов.
user3065757
@ user3065757 Спасибо за комментарии. Не могли бы вы уточнить с примерами?
Лк
Не то, на кого вы отвечаете, но когда я пытаюсь выяснить pd.concatваше объяснение, это не совсем работает. Не могли бы вы объяснить поведение concat с двумя осями, пожалуйста? Спасибо.
Боуэн Лю
@BowenLiu Когда вы объединяете 2 списка яблок, вы получаете 1 список больше яблок (но не больших яблок). Когда вы объединяете строки (ось = 0), вы получаете больше строк (не длинных строк); когда вы объединяете столбцы (axis = 1), вы получаете больше столбцов (не длинных столбцов). Идея заключается в том, что ось = 0 работает между рядами, а не внутри ряда.
lqu
0

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

Чтобы ответить на вопрос, как я его понимаю, в Pandas axis = 1 или 0 означает, какие заголовки осей вы хотите оставить постоянными при применении функции.

Примечание: когда я говорю заголовки, я имею в виду имена индексов

Расширяем ваш пример:

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      X     | 0.626386| 1.52325|
+------------+---------+--------+
|      Y     | 0.626386| 1.52325|
+------------+---------+--------+

Для оси = 1 = столбцы: мы сохраняем постоянные заголовки столбцов и применяем функцию среднего значения путем изменения данных. Для демонстрации мы оставляем заголовки столбцов постоянными:

+------------+---------+--------+
|            |  A      |  B     |

Теперь мы заполняем один набор значений A и B, а затем находим среднее

|            | 0.626386| 1.52325|  

Затем мы заполняем следующий набор значений A и B и находим среднее

|            | 0.626386| 1.52325|

Аналогично, для axis = row мы сохраняем константы заголовков строк и продолжаем изменять данные. Для демонстрации сначала исправьте заголовки строк:

+------------+
|      X     |
+------------+
|      Y     |
+------------+

Теперь заполните первый набор значений X и Y, а затем найдите среднее

+------------+---------+
|      X     | 0.626386
+------------+---------+
|      Y     | 0.626386
+------------+---------+

Затем заполните следующий набор значений X и Y и затем найдите среднее значение:

+------------+---------+
|      X     | 1.52325 |
+------------+---------+
|      Y     | 1.52325 |
+------------+---------+

В итоге,

Когда ось = столбцы, вы фиксируете заголовки столбцов и изменяете данные, которые будут поступать из разных строк.

Когда ось = строки, вы фиксируете заголовки строк и изменяете данные, которые будут поступать из разных столбцов.

Заин Хаишаги
источник
0

введите описание изображения здесь

введите описание изображения здесь

axis = 1, Это даст строку суммы, мудрый, keepdims = True сохранит 2D измерение. Надеюсь, это поможет вам.

РАХУЛ КУМАР
источник
Не ОП, но спасибо. Я думаю, что большая часть путаницы, которую люди имеют по этому поводу, заключается в том, что в документальном фильме Панды ось = 1 соответствует столбцам. Тем не менее, здесь он делает «построчное» вычисление.
Боуэн Лю
0

Многие ответы здесь мне очень помогли!

Если вас смущают различные варианты поведения axisв Python и MARGINR (как в applyфункции), вы можете найти интересную запись в блоге: https://accio.github.io/programming/2020/05/ 19 / numpy-pandas-axis.html .

По сути:

  • Их поведение, интригующе, легче понять с помощью трехмерных массивов, чем с двумерными массивами.
  • В пакетах Python numpyи pandasпараметр axis в сумме фактически указывает значение numpy для вычисления среднего значения всех значений, которые могут быть получены в виде массива [0, 0, ..., i, ..., 0], где я выполняю итерацию все возможные значения. Процесс повторяется с фиксированным положением i, и индексы других измерений меняются один за другим (от самого правого элемента). Результатом является n-1-мерный массив.
  • В R параметр MARGINS позволяет applyфункции вычислять среднее значение всех значений, которые могут быть получены в виде массива [, ..., i, ...,], где i выполняет итерацию по всем возможным значениям. Процесс не повторяется, когда все значения i были повторены. Следовательно, результатом является простой вектор.
Джитао Дэвид Чжан
источник
-6

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

Патрик
источник
axis=0означает, что каждая строка является объемной, мы можем манипулировать только между строками DataFrame вместо внутренней строки. axis=1означает каждый столбец как массив, мы можем манипулировать только внутренним столбцом DataFrame вместо внутреннего столбца.
Бельтер
5
Разве это не совсем неправильно в соответствии с почти всеми другими описаниями на этой странице (и согласно быстрому тесту с пандами в Jupyter)?
Марк Лиянаге
2
Это как раз наоборот. Пожалуйста, исправьте свой ответ.
Сумит