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
«вдоль каждой строки».