O que significa eixo nos pandas?


269

Aqui está o meu código para gerar um quadro de dados:

import pandas as pd
import numpy as np

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

então eu peguei o dataframe:

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

Quando digito o comando:

dff.mean(axis=1)

Eu tenho :

0    1.074821
dtype: float64

De acordo com a referência de pandas, axis = 1 representa colunas e espero que o resultado do comando seja

A    0.626386
B    1.523255
dtype: float64

Então, aqui está a minha pergunta: o que significa eixo nos pandas?

Respostas:


382

Ele especifica o eixo ao longo do qual as médias são calculadas. Por padrão axis=0. Isso é consistente com o numpy.meanuso quando axisé especificado explicitamente (em numpy.mean, eixo == Nenhum por padrão, que calcula o valor médio sobre a matriz achatada), no qual, axis=0ao longo das linhas (ou seja, indexar em pandas) e axis=1nas colunas . Para maior clareza, pode-se optar por especificar axis='index'(em vez de axis=0) ou axis='columns'(em vez de axis=1).

+------------+---------+--------+
|            |  A      |  B     |
+------------+---------+---------
|      0     | 0.626386| 1.52325|----axis=1----->
+------------+---------+--------+
             |         |
             | axis=0  |
                      

164
Normalmente, o eixo = 0 é considerado "em colunas" (e o eixo = 1 "em linhas"), acho que "ao longo das linhas" é confuso. (Nice "pic" embora :))
Andy Hayden

11
@AndyHayden sim, mas talvez ambos são um pouco confuso, para aqueles que pela primeira vez para se deparar com o presente;)
zhangxaochen

43
Além disso, o motivo que axis=0indica a agregação ao longo das linhas e a axis=1agregação nas colunas é devido à maneira como você indexa em um quadro de dados. Em df.iloc[row, column], rowestá na posição de índice 0 e columnestá na posição de índice 1. Numpy generaliza isso para N dimensões, que é onde o pensamento em termos do eixo em que a agregação é recolhida começa a fazer mais sentido do que "em linha" ou "em coluna" "
Tom P.

11
Eu ainda me sinto confuso. Se o fizer df.drop("A", axis = 1), a coluna A será descartada. Não é "ao longo da linha" nem "em linha", mas está soltando a coluna A. #
23418

5
@ytu axis=0significa cada linha como um volume, só podemos manipular DataFrame entre linhas em vez de linha interna. axis=1significa cada coluna como um volume, só podemos manipular a inter-coluna do DataFrame em vez da coluna interna. Então, se você usar df.drop("A", axis = 1), ele soltará uma coluna inteira.
Belter

106

Essas respostas ajudam a explicar isso, mas ainda não é perfeitamente intuitivo para quem não é programador (ou seja, alguém como eu que está aprendendo Python pela primeira vez no contexto de cursos de ciência de dados). Ainda acho que usar os termos "along" ou "for each" para linhas e colunas é confuso.

O que faz mais sentido para mim é dizer desta maneira:

  • O eixo 0 atuará em todas as ROWS em cada COLUNA
  • O eixo 1 atuará em todas as COLUNAS em cada ROW

Portanto, uma média no eixo 0 será a média de todas as linhas em cada coluna e uma média no eixo 1 será a média de todas as colunas em cada linha.

Em última análise, isso está dizendo a mesma coisa que @zhangxaochen e @Michael, mas de uma maneira que é mais fácil para eu internalizar.


Eu acho que a confusão vem da complexidade de cada chamado "ato". O df.dropna (eixo = 0) primeiro verifica todas as colunas em cada linha e, em seguida, descarta essas linhas com um valor nulo. O eixo fala sobre o último passo, mas nosso cérebro se concentrará na primeira parte.
Shawn Chen

69

Vamos visualizar (você vai se lembrar sempre), insira a descrição da imagem aqui

Nos pandas:

  1. eixo = 0 significa ao longo de "índices". É uma operação em linha .

Suponha que, para executar a operação concat () no dataframe1 e dataframe2, pegaremos o dataframe1 e retiremos a primeira linha do dataframe1 e colocaremos no novo DF, em seguida, removermos outra linha do dataframe1 e colocar no novo DF, repetiremos esse processo até chegamos ao final do dataframe1. Em seguida, fazemos o mesmo processo para o dataframe2.

Basicamente, empilhe o dataframe2 em cima do dataframe1 ou vice-versa.

Por exemplo, fazer uma pilha de livros sobre uma mesa ou chão

  1. eixo = 1 significa ao longo de "colunas". É uma operação em colunas.

Suponha que, para executar a operação concat () no dataframe1 e dataframe2, removeremos a 1ª coluna completa (também conhecida como 1ª série) do dataframe1 e colocaremos no novo DF, em seguida, removeremos a segunda coluna do dataframe1 e permaneceremos adjacentes (lateralmente) ) , precisamos repetir esta operação até que todas as colunas sejam concluídas. Em seguida, repetimos o mesmo processo no dataframe2. Basicamente, empilhando o dataframe2 lateralmente.

Por exemplo, organizando livros em uma estante.

Além disso, como matrizes são melhores representações para representar uma estrutura n-dimensional aninhada em comparação com matrizes! portanto, abaixo, você pode visualizar melhor como o eixo desempenha um papel importante quando você generaliza para mais de uma dimensão. Além disso, você pode realmente imprimir / escrever / desenhar / visualizar qualquer matriz n-dim, mas escrever ou visualizar a mesma em uma representação de matriz (3-dim) é impossível em um papel com mais de 3 dimensões.

insira a descrição da imagem aqui


6
Eu acho que essa resposta é a correta. Você precisa visualizá-lo. axis = 0 (ou axis = 'linhas' é o eixo horizontal. axis = 1 (ou axis = 'columns') é o eixo vertical. Para ir além, se você usar o método pandas drop, para remover colunas ou linhas, se você especificar axis = 1 você removerá as colunas.Se você especificar axis = 0, removerá linhas do conjunto de dados.Portanto, se tivermos algum quadro de dados do pandas na variável df: df.drop (0, axis = 0) removerá toda a primeira linha do conjunto de dados df.drop ( 'notas', eixo = 1) irá remover 'notas' coluna do conjunto de dados espero que isso esclarece que pouco mais ...
Roboblob

3
@ Robobob - ainda confuso. df.drop (n, eixo = 1) atua em uma coluna. Por que o df.mean (axis = 1) não atua em uma coluna?
matty

@matty, primeiro! tenha as mãos sujas !, é tão direto. Para sua referência, drop & mean , o eixo = 1 é o mesmo para ambos, faça uma nova pergunta se você não entendeu algo no seu exemplo!
Anu

2
@anu - mãos sujas? Não precisamos nos entupir com perguntas duplicadas. Estou confiante de que uma ou mais respostas nesta página possam ser esclarecidas para reduzir essa confusão. Eu mesma faria se pudesse, mas por enquanto só sei como usá-las. Entendo qual eixo usar para obter os dados que desejo. No entanto, permanece a confusão sobre o motivo pelo qual mean () e drop () parecem afetar os eixos opostos.
matty

2
Receio que esta resposta seja incrivelmente confusa. Você fala sobre agir em linhas como sendo eixo = 0, mas desenha setas vermelhas descendo colunas. Você fala sobre o eixo = 1 atuando em colunas, mas desenha setas passando por uma linha. Quem criou esse sistema não pensou muito bem.
rocksNwaves

33

axisrefere-se à dimensão da matriz, no caso de pd.DataFrames axis=0é a dimensão que aponta para baixo eaxis=1 a que aponta para a direita.

Exemplo: Pense em um ndarraycom forma (3,5,7).

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

aé tridimensional ndarray, ou seja, possui 3 eixos ("eixos" é plural de "eixo"). A configuração de aserá semelhante a 3 fatias de pão, onde cada fatia é da dimensão 5 por 7. a[0,:,:]irá se referir à fatia 0-th,a[1,:,:] irá se referir à 1ª fatia etc.

a.sum(axis=0)será aplicado sum()ao longo do eixo 0 de a. Você adicionará todas as fatias e terminará com uma fatia de forma(5,7) .

a.sum(axis=0) é equivalente a

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

be a.sum(axis=0)ambos terão esta aparência

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

Em a pd.DataFrame, os eixos funcionam da mesma maneira que em numpy.arrays: axis=0será aplicadosum() ou qualquer outra função de redução para cada coluna.

NB Na resposta de @ zhangxaochen, considero as frases "ao longo das linhas" e "ao longo das colunas" um pouco confusas. axis=0deve se referir a "ao longo de cada coluna" e axis=1"ao longo de cada linha".


1
Esta é uma resposta melhor que a aceita - uma vez que Safak menciona as frases usadas, as palavras são fracas e levam a ainda mais confusão.
Javadba

Esta é a melhor resposta
Ravi G

24

A maneira mais fácil de entender é discutir se você está calculando uma estatística para cada coluna ( axis = 0) ou cada linha ( axis = 1). Se você calcular uma estatística, diga uma média, axis = 0obterá essa estatística para cada coluna. Portanto, se cada observação for uma linha e cada variável estiver em uma coluna, você obterá a média de cada variável. Se você definiraxis = 1 , calculará sua estatística para cada linha. No nosso exemplo, você obteria a média para cada observação em todas as suas variáveis ​​(talvez você queira a média das medidas relacionadas).

axis = 0: por coluna = coluna = ao longo das linhas

axis = 1: por linha = linha = ao longo das colunas


Eu acho que "junto" deve ser substituído por "através". Seguir algo (por exemplo, estrada) para mim significa permanecer nele, mas com axis=0isso não ficamos na linha de dizer quando, digamos, calcular a média; em vez disso, percorremos todas as linhas de uma coluna.
Confundido 13/03

13

Vamos olhar para a tabela do Wiki. Esta é uma estimativa do PIB do FMI de 2010 a 2019 para os dez principais países. insira a descrição da imagem aqui

1. O eixo 1 atuará para cada linha em todas as colunas
Se você deseja calcular o PIB médio (médio) para CADA países durante a década (2010-2019), é necessário fazer isso df.mean(axis=1). Por exemplo, se você deseja calcular o PIB médio dos Estados Unidos de 2010 a 2019,df.loc['United States','2010':'2019'].mean(axis=1)

2. O eixo 0 atuará para cada coluna em todas as linhas.
Se eu quiser calcular o PIB médio (médio) de CADA ano para todos os países, você precisará fazer isso df.mean(axis=0). Por exemplo, se você deseja calcular o PIB médio do ano de 2015 para Estados Unidos, China, Japão, Alemanha e Índia, df.loc['United States':'India','2015'].mean(axis=0)

Observação: o código acima funcionará somente após a definição da coluna "País (ou território dependente)" como Índice, usando set_indexmétodo.


11

O eixo em vista da programação é a posição na tupla de forma. Aqui está um exemplo:

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)

A média no eixo fará com que essa dimensão seja removida.

Referindo-se à pergunta original, a forma dff é (1,2). Usar o eixo = 1 mudará a forma para (1,).


8

O designer de pandas, Wes McKinney, costumava trabalhar intensamente em dados financeiros. Pense em colunas como nomes de ações e indexe como preços diários. Você pode adivinhar qual é o comportamento padrão (ou seja, axis=0) com relação a esses dados financeiros. axis=1pode ser simplesmente pensado como "a outra direção".

Por exemplo, as funções estatísticas, tais como mean(), sum(), describe(), count()tudo padrão para a coluna-wise porque faz mais sentido fazê-los para cada ação. sort_index(by=)O padrão também é coluna. fillna(method='ffill')preencherá ao longo da coluna porque é o mesmo material.dropna()o padrão é remar porque você provavelmente só quer descartar o preço naquele dia em vez de jogar fora todos os preços desse estoque.

Da mesma forma, a indexação de colchetes refere-se às colunas, pois é mais comum escolher uma ação em vez de escolher um dia.


1
seu raciocínio soa correto, mas mean (), sum () e outras funções são padronizadas como (axis = 0), que é linear e não como mencionado acima. E em linhas parece se comportar como esperamos em colunas :) e isso parece ser a confusão.
bincob

5

uma das maneiras fáceis de lembrar o eixo 1 (colunas) e o eixo 0 (linhas) é a saída que você espera.

  • se você espera uma saída para cada linha, você usa o eixo = 'colunas',
  • por outro lado, se você quiser uma saída para cada coluna, use axis = 'lines'.

Obrigado. Isso, no entanto, só funciona para computação, certo? Não funcionaria para métodos como pd.concatou df.dropna(), que usa o eixo kewarg em mais capacidade de identificação.
Bowen Liu

3

O problema de usar axis=corretamente é para seu uso em 2 casos diferentes principais:

  1. Para calcular um valor acumulado ou reorganizar (por exemplo, classificar) dados.
  2. Para manipular ("brincar" com) entidades (por exemplo, quadros de dados ).

A principal idéia por trás dessa resposta é que, para evitar a confusão, selecionamos um número ou um nome para especificar o eixo específico, o que for mais claro, intuitivo e descritivo.

O Pandas é baseado no NumPy, que é baseado em matemática, particularmente em matrizes n-dimensionais. Aqui está uma imagem para uso comum dos nomes dos eixos em matemática no espaço tridimensional:

insira a descrição da imagem aqui Esta figura é para memorizar apenas os números ordinais dos eixos :

  • 0 para o eixo x,
  • 1 para o eixo y, e
  • 2 para o eixo z.

O eixo z é apenas para painéis ; para quadros de dados , restringiremos nosso interesse ao plano básico bidimensional de cor verde com o eixo x ( 0vertical) e o eixo y ( 1horizontal).

insira a descrição da imagem aqui É tudo para números como valores potenciais do axis=parâmetro.

Os nomes dos eixos são 'index'(você pode usar o alias 'rows') e 'columns', e para esta explicação , NÃO é importante a relação entre esses nomes e números ordinais (de eixos), pois todos sabem o que significam as palavras "linhas" e "colunas" ( e todos aqui - suponho - sabem o que significa a palavra "índice" nos pandas).

E agora, minha recomendação:

  1. Se você deseja calcular um valor acumulado , você pode calculá-lo a partir dos valores localizados ao longo do eixo 0 (ou ao longo do eixo 1 ) - use axis=0(ou axis=1).

    Da mesma forma, se você deseja reorganizar os valores , use o número do eixo ao longo do qual estão localizados os dados para reorganizar (por exemplo, para classificar ).

  2. Se você deseja manipular (por exemplo, concatenar ) entidades (por exemplo, quadros de dados ) - use axis='index'(sinônimo :)axis='rows' ou axis='columns'para especificar a alteração resultante - índice ( linhas ) ou colunas , respectivamente.
    (Para concatenar , você obterá um índice mais longo (= mais linhas) ou mais colunas , respectivamente.)


esta é a melhor resposta e provavelmente deve ser marcada como a resposta correta pelo op!
Anze

2

Isso é baseado na resposta de @ Safak. A melhor maneira de entender os eixos em pandas / numpy é criar uma matriz 3d e verificar o resultado da função soma ao longo dos 3 eixos diferentes.

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

a será:

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

Agora confira a soma dos elementos da matriz ao longo de cada um dos eixos:

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

fornecerá os seguintes resultados:

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

2

Eu entendo assim:

Digamos que se sua operação requer a movimentação da esquerda para a direita / direita para a esquerda em um dataframe, você está aparentemente mesclando colunas. você está operando em várias colunas. Este é o eixo = 1

Exemplo

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

Aponte para notar aqui que estamos operando em colunas

Da mesma forma, se sua operação exigir a passagem de cima para baixo / baixo para cima em um quadro de dados, você estará mesclando linhas. Este é o eixo = 0 .


1

eixo = 0 significa para cima eixo para baixo = 1 significa da esquerda para a direita

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

O exemplo dado é a soma de todos os dados na coluna == chave.


0

Meu pensamento: Axis = n, onde n = 0, 1, etc. significa que a matriz está recolhida (dobrada) ao longo desse eixo. Portanto, em uma matriz 2D, quando você recolhe ao longo de 0 (linhas), você está realmente operando em uma coluna por vez. Da mesma forma para matrizes de ordem superior.

Isso não é o mesmo que a referência normal a uma dimensão em uma matriz, onde 0 -> linha e 1 -> coluna. Da mesma forma para outras dimensões em uma matriz de dimensão N.


0

Eu sou um novato em pandas. Mas é assim que eu entendo o eixo nos pandas:


Direção variável constante do eixo


0 Linha da coluna para baixo |


Coluna de 1 linha à direita ->


Portanto, para calcular a média de uma coluna, essa coluna específica deve ser constante, mas as linhas abaixo disso podem mudar (variando), de modo que seja eixo = 0.

Da mesma forma, para calcular a média de uma linha, essa linha específica é constante, mas pode percorrer colunas diferentes (variadas) , eixo = 1.


0

Eu acho que existe uma outra maneira de entender isso.

Para uma matriz np, se queremos eliminar colunas, usamos o eixo = 1; se queremos eliminar linhas, usamos o eixo = 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,)

Para o objeto pandas, axis = 0significa operação em linha e axis = 1significa operação em coluna. Isso é diferente de numpypor definição, podemos verificar as definições de numpy.doc e pandas.doc


0

Evitarei explicitamente o uso de 'linha' ou 'ao longo das colunas', pois as pessoas podem interpretá-las exatamente da maneira errada.

Analogia primeiro. Intuitivamente, você esperaria que pandas.DataFrame.drop(axis='column')elimine uma coluna de N colunas e forneça (N - 1) colunas. Portanto, você não deve prestar atenção às linhas por enquanto (e remova a palavra 'linha' do seu dicionário de inglês). Vice-versa, drop(axis='row')funciona em linhas.

Da mesma forma, sum(axis='column')funciona em várias colunas e fornece uma coluna. Similarmente,sum(axis='row') resulta em 1 linha. Isso é consistente com sua forma mais simples de definição, reduzindo uma lista de números para um único número.

Em geral, com axis=column, você vê colunas, trabalha em colunas e obtém colunas. Esqueça as linhas.

Com axis=row, mude a perspectiva e trabalhe nas linhas.

0 e 1 são apenas aliases para 'linha' e 'coluna'. É a convenção da indexação matricial.


Essa interpretação não está correta usando o eixo = 'colunas' não fornece colunas.
user3065757

@ user3065757 Obrigado pelos comentários. Você poderia elaborar com exemplos?
Ld 5/12/19

Não para quem você está respondendo, mas quando tento descobrir pd.concatsua explicação, isso não funciona. Você poderia explicar o comportamento da concat com os 2 eixos, por favor? Obrigado.
Bowen Liu

@BowenLiu Quando você concatena 2 listas de maçãs, obtém 1 lista de mais maçãs (mas não maçãs maiores). Ao concaturar linhas (eixo = 0), você obtém mais linhas (não linhas mais longas); ao concaturar colunas (eixo = 1), você obtém mais colunas (não colunas mais longas). A ideia é o eixo = 0 operar entre linhas, não dentro de uma linha.
lqu

0

Eu tenho tentado descobrir o eixo pela última hora também. O idioma em todas as respostas acima e também a documentação não são de todo úteis.

Para responder à pergunta como eu a entendo agora, no Pandas, eixo = 1 ou 0 significa quais cabeçalhos de eixo você deseja manter constante ao aplicar a função.

Nota: Quando digo cabeçalhos, quero dizer nomes de índice

Expandindo seu exemplo:

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

Para eixo = 1 = colunas: mantemos os cabeçalhos das colunas constantes e aplicamos a função média alterando os dados. Para demonstrar, mantemos os cabeçalhos das colunas constantes como:

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

Agora, preenchemos um conjunto de valores A e B e, em seguida, encontramos a média

|            | 0.626386| 1.52325|  

Em seguida, preenchemos o próximo conjunto de valores A e B e encontramos a média

|            | 0.626386| 1.52325|

Da mesma forma, para eixos = linhas, mantemos os cabeçalhos das linhas constantes e alteramos os dados: Para demonstrar, primeiro corrija os cabeçalhos das linhas:

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

Agora preencha o primeiro conjunto de valores X e Y e encontre a média

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

Em seguida, preencha o próximo conjunto de valores X e Y e encontre a média:

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

Em suma,

Quando eixo = colunas, você fixa os cabeçalhos das colunas e altera os dados, que virão das diferentes linhas.

Quando eixo = linhas, você fixa os cabeçalhos das linhas e altera os dados, que virão das diferentes colunas.


0

insira a descrição da imagem aqui

insira a descrição da imagem aqui

axis = 1, dará a soma da linha sábia, keepdims = True manterá a dimensão 2D. Espero que ajude você.


Não OP, mas obrigado. Eu acho que a maioria da confusão que as pessoas têm sobre isso é, no documentário de Pandas, eixo = 1 corresponde a colunas. No entanto, aqui está o cálculo 'em linha'.
Bowen Liu

0

Muitas respostas aqui me ajudaram muito!

Caso você fique confuso com os diferentes comportamentos do axisPython e MARGINdo R (como na applyfunção), você pode encontrar uma postagem de blog que escrevi de interesse: https://accio.github.io/programming/2020/05/ 19 / numpy-pandas-axis.html .

Em essência:

  • Seus comportamentos são, intrigantemente, mais fáceis de entender com uma matriz tridimensional do que com uma matriz bidimensional.
  • Nos pacotes Python numpye pandas, o parâmetro do eixo na soma na verdade especifica numpy para calcular a média de todos os valores que podem ser buscados na forma de matriz [0, 0, ..., i, ..., 0] onde itera através de todos os valores possíveis. O processo é repetido com a posição de i fixa e os índices de outras dimensões variam um após o outro (do elemento mais à direita). O resultado é uma matriz n-1-dimensional.
  • Em R, o parâmetro MARGINS permite que a applyfunção calcule a média de todos os valores que podem ser buscados na forma de matriz [, ..., i, ...,] onde itera todos os valores possíveis. O processo não é repetido quando todos os valores de i foram iterados. Portanto, o resultado é um vetor simples.

-6

As matrizes são projetadas com o chamado eixo = 0 e as linhas posicionadas verticalmente versus o eixo = 1 e as colunas posicionadas horizontalmente. Eixo refere-se à dimensão da matriz. Ilustração


axis=0significa cada linha como um lote, só podemos manipular DataFrame entre linhas em vez de linha interna. axis=1significa cada coluna como um volume, só podemos manipular a inter-coluna do DataFrame em vez da coluna interna.
Belter

5
Não é exatamente o contrário, de acordo com quase todas as outras descrições desta página (e de acordo com um teste rápido com pandas em Jupyter)?
Marc Liyanage

2
Isto é precisamente o oposto. Corrija sua resposta.
Sumit Pokhrel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.