Що означає вісь у пандах?


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

Відповідно до посилань на панди, ось = 1 означає стовпці, і я очікую, що результат команди буде

A    0.626386
B    1.523255
dtype: float64

Тож ось моє запитання: що означає вісь у пандах?

Відповіді:


382

Він визначає вісь, вздовж якої обчислюються засоби. За замовчуванням axis=0. Це узгоджується з numpy.meanвикористанням, коли axisвказано явноnumpy.mean, ось == Немає за замовчуванням, що обчислює середнє значення над сплющеним масивом), в якому axis=0по рядках (а саме - індекс у пандах) та axis=1уздовж стовпців . Для додаткової ясності можна вибрати axis='index'(замість axis=0) або axis='columns'(замість axis=1).

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

164
Зазвичай ось = 0, як кажуть, є "стовпчиком" (а ось = 1 "рядок"), я думаю, "по рядках" заплутано. (Хороший "рис", хоча :))
Енді Хайден

11
@AndyHayden Так, але, можливо, обидва трохи заплутані для тих, хто вперше натрапив на це;)
zhangxaochen

43
Також причина, яка axis=0вказує на агрегування по рядках і axis=1вказує на агрегування вздовж стовпців, пов’язана з тим, як ви індексуєте в кадр даних. В df.iloc[row, column], rowзнаходиться в позиції індексу 0 і columnзнаходиться в позиції індексу 1. Numpy узагальнює це на N розмірів, і саме тоді, коли мислення з точки зору осі, що згортається, починає мати більше сенсу, ніж "рядок" або "стовпчик" ".
Том Q.

11
Я все ще відчуваю заплутаність. Якщо я це зробити, df.drop("A", axis = 1)то стовпець " А " буде випав. Це не «по ряду» , ні «строчном» , але скинувши колонка А.
ytu

5
@ytu axis=0означає, що кожен рядок є основним, ми можемо маніпулювати лише міжрядком DataFrame замість внутрішнього рядка. axis=1означає кожен стовпчик як основний, ми можемо лише маніпулювати міжколонками DataFrame замість внутрішнього стовпця. Тож якщо ви скористаєтесь df.drop("A", axis = 1), вона викине цілий стовпчик.
Белтер

106

Ці відповіді допомагають пояснити це, але це все ще не зовсім інтуїтивно зрозуміло для непрограміста (тобто хтось, як я, який вперше вивчає Python у контексті курсової роботи з інформатики). Я все ще вважаю, що використання термінів "вздовж" або "для кожного" wrt до рядків і стовпців є заплутаним.

Що для мене більше сенсу - це сказати так:

  • Вісь 0 діятиме на всі ПОРУШЕННЯ у кожній КОЛІНІ
  • Вісь 1 діятиме на всі КОЛОНИ в кожному РЯДУ

Отже, середнє на осі 0 буде середнім для всіх рядків у кожному стовпчику, а середнє на осі 1 буде середнім для всіх стовпців у кожному рядку.

Зрештою, це говорить те саме, що і @zhangxaochen та @Michael, але таким чином, що мені простіше інтерналізувати.


Я думаю, що плутанина випливає із складності кожного так званого «вчинку». df.dropna (ось = 0) спочатку перевірить усі КОЛОНИ в кожному ряду, а потім скине ці ROWS з нулем. Вісь говорить про останній крок, але наш мозок зосередиться на першій частині.
Шон Чен

69

Давайте візуалізуємо (ти завжди пам’ятатимеш), введіть тут опис зображення

У пандах:

  1. ось = 0 означає вздовж "індексів". Це строка операція .

Припустимо, щоб виконати операцію concat () на dataframe1 & dataframe2, ми візьмемо dataframe1 & виймемо 1-й рядок з dataframe1 і помістимо в новий DF, потім витягнемо ще один рядок з dataframe1 і введемо в новий DF, повторимо цей процес, поки ми доходимо до основи фрейму даних1. Тоді ми робимо той самий процес для dataframe2.

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

Наприклад, роблячи купу книг на столі чи підлозі

  1. ось = 1 означає уздовж "стовпців". Це стовпчаста операція.

Припустимо, щоб виконати операцію concat () на dataframe1 & dataframe2, ми виведемо 1-й повний стовпчик (він же 1-й ряд) dataframe1 і помістимо в новий DF, потім витягнемо другий стовпець dataframe1 і залишимося поруч із ним (збоку ) , нам потрібно повторити цю операцію, поки всі стовпці не будуть закінчені. Потім ми повторюємо той самий процес у dataframe2. В основному, укладання даних datamereme2 набік.

Наприклад, упорядкування книг на полиці.

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

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


6
Я думаю, що ця відповідь є правильною. Вам потрібно його візуалізувати. ось = 0 (або ось = "рядки" - горизонтальна вісь. Ось = 1 (або вісь = "стовпці") - вертикальна вісь. Для подальшого використання, якщо ви використовуєте метод панд drop, видалення стовпців або рядків, якщо ви вказуєте ось = 1 ви будете видаляти стовпці. Якщо ви вкажете ось = 0, ви будете видаляти рядки з набору даних. Отже, якщо у нас є певний кадр даних панд у змінній df: df.drop (0, ось = 0), буде видалено весь перший рядок набору даних df.drop ('оцінки', вісь = 1) видалить стовпець "оцінки" з набору даних Сподіваюся, що це
уточнить

3
@Roboblob - все ще заплутано. df.drop (n, вісь = 1) діє на стовпчик. Чому df.mean (ось = 1) не вживає дій над стовпцем?
матовий

@matty, по-перше! ваші руки брудні! Це так прямо вперед. Для довідки, drop & mean , ось = 1 однакова для обох, будь ласка, задайте нове запитання, якщо ви нічого не зрозуміли у своєму прикладі!
Ану

2
@anu - руки брудні? Нам не потрібно захаращувати ТА з повторюваними питаннями. Я впевнений, що можна зменшити одну чи кілька відповідей на цій сторінці, щоб зменшити цю плутанину. Я би зробив це сам, якби міг, але наразі я лише знаю, як ними користуватися. Я розумію, яку вісь використовувати для отримання потрібних даних. Однак залишається плутанина щодо того, чому середні () і 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
Це краща відповідь, ніж прийнята - оскільки, як згадує Сафак, фрази, які вживаються, є погано сформульованими та призводять до ще більшої плутанини.
javadba

Це краща відповідь
Раві Г

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


8

Дизайнер панд, Уес Маккінні, інтенсивно працював над даними про фінанси. Подумайте про стовпці як назви запасів, а індекс - як щоденні ціни. Потім ви можете здогадатися, що таке поведінка за замовчуванням (тобто axis=0) стосовно цих фінансових даних. axis=1можна просто думати як "інший напрямок".

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

Аналогічно, індексація квадратних дужок стосується стовпців, оскільки частіше вибирати запас, а не збирати день.


1
Ваші міркування звучать правильно, але мають значення (), sum () та інші функції за замовчуванням до (ось = 0), що є строковим, а не як зазначено вище. І, мабуть, рядковий поводиться так, як ми розраховуємо на колонки :), і це, мабуть, плутанина.
bincob

5

Один з простих способів запам'ятати вісь 1 (стовпці), а ось 0 (рядки) - результат, який ви очікуєте.

  • якщо ви очікуєте вихід для кожного рядка, ви використовуєте ось = "стовпці",
  • з іншого боку, якщо ви хочете вихід для кожного стовпця, ви використовуєте ось = 'рядки'.

Дякую. Це, однак, працює лише для обчислень? Він би не працював для таких методів, як pd.concatабо df.dropna(), що використовує вісь kewarg в більшій мірі ідентифікації.
Боуен Лю

3

Проблема з axis=правильним використанням полягає в тому, що вона використовується для двох основних випадків:

  1. Для обчислення накопиченого значення або перестановки (наприклад, сортування) даних.
  2. Для маніпулювання ("грання") сутностей (наприклад, фрейми даних ).

Основна ідея цієї відповіді полягає в тому, що, щоб уникнути плутанини, ми вибираємо або число , або ім’я для вказівки конкретної осі, залежно від того , що є більш зрозумілим, інтуїтивним та описовим.

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

введіть тут опис зображення Це зображення призначене лише для запам'ятовування порядкових номерів осей :

  • 0 для осі x,
  • 1 для осі у і
  • 2 для осі z.

Ось г тільки для панелей ; для фреймів даних ми обмежимо наш інтерес зеленим кольором, двовимірної базової площини з осі x (( 0вертикальна) та y-осі ( 1горизонтальна).

введіть тут опис зображення Це все для чисел як потенційних значень axis=параметра.

У назві осей є 'index'(ви можете використовувати псевдонім 'rows') і 'columns', і для цього пояснення це не важливо співвідношення між цими іменами і порядковими номерами (осі), так як всі знають , які слова «рядок» і «стовпчики» означає ( і всі тут - я гадаю - знають, що означає слово "індекс" у пандах).

І ось, моя рекомендація:

  1. Якщо ви хочете обчислити накопичене значення , ви можете обчислити його зі значень, розташованих уздовж осі 0 (або вздовж осі 1 ) - використовувати axis=0(або axis=1).

    Аналогічно, якщо ви хочете переставити значення , використовуйте номер осі осі, уздовж якого розміщені дані для перестановки (наприклад, для сортування ).

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


це найкраща відповідь, і, ймовірно, слід зазначити як правильну відповідь ОП!
Анз

2

Це ґрунтується на відповіді @ Сафака. Найкращий спосіб зрозуміти осі в пандах / numpy - це створити 3d масив і перевірити результат функції суми вздовж трьох різних осей.

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

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)

Наведений приклад - це підведення суми всіх даних у стовпці == ключ.


0

Моє мислення: вісь = n, де n = 0, 1 і т. Д. Означає, що матриця згорнута (складена) вздовж цієї осі. Отже, у 2D матриці, коли ви згортаєтесь на 0 (рядки), ви дійсно працюєте над одним стовпцем одночасно. Аналогічно для матриць вищого порядку.

Це не те саме, що звичайне посилання на вимір у матриці, де 0 -> рядок та 1 -> стовпець. Аналогічно для інших розмірів у масиві N розмірів.


0

Я новачок у пандах. Але ось як я розумію вісь в пандах:


Постійний змінний напрямок осі


0 Стовпець рядок вниз |


1 Стовпчик рядків вправо ->


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

Аналогічно, для обчислення середнього ряду, цей конкретний рядок є постійним але він може проходити через різні стовпці (змінюються) , вісь = 1.


0

Я думаю, що є інший спосіб зрозуміти це.

Для np.array, якщо ми хочемо усунути стовпці, ми використовуємо ось = 1; якщо ми хочемо усунути рядки, використовуємо ось = 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,)

Для об'єкта pandas - axis = 0розширення для рядкових операцій і axis = 1для операцій у стовпцях. Це відрізняється від numpyвизначення, ми можемо перевірити визначення з numpy.doc та pandas.doc


0

Я явно уникаю використання "рядків" або "уздовж стовпців", оскільки люди можуть трактувати їх абсолютно неправильно.

Аналогія перша. Інтуїтивно ви очікуєте, що pandas.DataFrame.drop(axis='column')випадає стовпчик з N стовпців і дає вам (N - 1) стовпців. Таким чином, ви зараз не можете звертати увагу на рядки (і видалити слово "рядок" зі свого словника англійської мови). Навпаки, це drop(axis='row')працює на рядках.

Таким же чином sum(axis='column')працює над декількома стовпцями і дає вам 1 стовпчик. Аналогічноsum(axis='row') результати в 1 ряду. Це відповідає його найпростішій формі визначення, зменшуючи список чисел до єдиного числа.

Загалом, з axis=column, ви бачите стовпці, працюєте над стовпцями та отримуєте стовпці. Забудьте про ряди.

З axis=row, змінити перспективу і працювати над рядками.

0 і 1 - просто псевдоніми для "рядок" і "стовпець". Це умова матричного індексування.


Ця інтерпретація не є правильною, використовуючи ось = "стовпці" не дає вам стовпців.
користувач3065757

@ user3065757 Дякую за коментарі. Чи можете ви детальніше розібратися з прикладами?
lqu

Не на кого ви відповідаєте, але коли я намагаюся розібратися pd.concatз вашим поясненням, це не зовсім спрацьовує. Не могли б ви пояснити лаконічну поведінку двома осями? Дякую.
Боуен Лю

@BowenLiu Коли ви складете 2 списки яблук, ви отримаєте 1 список більше яблук (але не більших яблук). Коли ви стискаєте рядки (вісь = 0), ви отримуєте більше рядків (не довших рядків); коли ви стискаєте стовпці (вісь = 1), ви отримуєте більше стовпців (не довших стовпців). Ідея осі = 0 діє між рядками, а не всередині рядка.
lqu

0

Я вже останній годині намагаюся розібрати вісь. Мова у всіх вищезазначених відповідях, а також документація зовсім не корисна.

Щоб відповісти на запитання, як я його зараз розумію, в Pandas ось = 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|

Аналогічно, для осі = рядки ми підтримуємо постійні заголовки рядків і постійно змінюємо дані: Щоб продемонструвати, спочатку зафіксуйте заголовки рядків:

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

Тепер заповніть спочатку набір значень X і Y, а потім знайдіть середнє значення

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

Потім заповніть наступний набір значень X і Y і знайдіть середнє:

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

Підсумовуючи це,

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

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


0

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

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

ось = 1, це дасть рядок суми мудрий, holddims = True збереже двовимірний вимір. Сподіваюся, це допоможе вам.


Не ОП, але дякую. Я думаю, що більшість плутанини, що виникають у людей щодо цього, у документальному фільмі Пандаса вісь = 1 відповідає стовпцям. Однак тут робиться "рядковий" розрахунок.
Боуен Лю

0

Багато відповідей тут мені дуже допомогли!

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

По суті:

  • Їх поведінку, що цікаво, легше зрозуміти за допомогою тривимірного масиву, ніж з двовимірними масивами.
  • У пакетах Python numpyтаpandas параметр осі за сумою фактично вказує numpy для обчислення середнього значення всіх значень, які можна отримати у вигляді масиву [0, 0, ..., i, ..., 0], де я повторюється через всі можливі значення. Процес повторюється з положенням i фіксованим, а показники інших розмірів змінюються один за одним (від самого правого елемента). Результат - n-1-мірний масив.
  • У R параметр MARGINS нехай applyфункція обчислює середнє значення всіх значень, які можна отримати у вигляді масиву [, ..., i, ...,], де я перебирається через усі можливі значення. Процес не повторюється, коли всі значення i були повторені. Тому результат - простий вектор.

-6

Масиви розроблені так званою віссю = 0 і рядками, розташованими вертикально проти осі = 1 та стовпцями, розташованими горизонтально. Вісь відноситься до розмірності масиву. Ілюстрація


axis=0означає кожен рядок як основний, ми можемо маніпулювати лише міжрядком DataFrame замість внутрішнього рядка. axis=1означає кожен стовпчик як основний, ми можемо лише маніпулювати міжколонками DataFrame замість внутрішнього стовпця.
Белтер

5
Чи не зовсім так, як це стосується майже всіх інших описів на цій сторінці (і відповідно до швидкого тесту з пандами в Юпітері)?
Marc Liyanage

2
Це якраз навпаки. Будь ласка, виправте свою відповідь.
Суміт Похрель
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.