Не могу понять принцип работы данного выражения
Проясните, пожалуйста, следующий момент. У меня есть датафрейм в Pandas:
df1 = pd.DataFrame({'A': [1, 2, 3, 4, 5, 4, 3, 3, 2, 3],
'B': [2, 2, 7, 9, 10, 5, 3, 1, 8, 2]})
и я применяю df1['A'].value_counts() к столбцу A получаю следующее:
3 4
4 2
2 2
5 1
1 1
Name: A, dtype: int64
Все понятно, но когда я применяю так: df1['A'].value_counts()[df1['A']], то получаю следующее:
1 1
2 2
3 4
4 2
5 1
4 2
3 4
3 4
2 2
3 4
Name: A, dtype: int64
Я понимаю, что произошло, но я не понимаю, как это сработало при добавлении к формуле [df1['A']].
Можете пояснить на пальцах, почему датафрейм так вывелся?
Ответы (1 шт):
Ничего страшного.
df1['A'].value_counts() - это серия.
Вы к ней применили [df1['A']], что сокращенная запись для применения .loc[df1['A']].
В квадратных скобках свойства .loc может быть для документации список значений индекса (или ему подобное) для получения соответствующих строк из серии.
Но вы его представили (в форме серии, которая в этом контексте рассматривается как список ее значений: [1, 2, 3, 4, 5, 4, 3, 3, 2, 3]), значит, вы получили из серии
df1['A'].value_counts()
строки с этими метками в индексе. Конечно, как серию.
Примечание:
Индексирование только квадратными скобками может быть для контекста интерпретировано по разному:
- строго по питонически (т.е. как применение метода
.__getitem__()), - как применение свойства
.loc[]объекта типа DataFrame или Series, - как применение свойства
.iloc[]объекта типа DataFrame или Series.
К сожалению, контекст может быть иногда многозначным (но это не ваш случай) и тоже может быть в каких-то условиях правильно определен только в ходе программы (опять не ваш случай), что может иметь влияние на скорость (невозможно применить оптимизацию).
Потому документация об индексации в синей рамке строго рекомендует (для последних двух случаев) использовать явную форму с применением .loc или .iloc[].