2016-03-28 3 views

ответ

8

Это то же самое, если в pivot_table использовании aggfunc=len и fill_value=0:

pd.crosstab(df['Col X'], df['Col Y']) 
pd.pivot_table(df, index=['Col X'], columns=['Col Y'], aggfunc=len, fill_value=0) 

EDIT: Существует больше разница:

По умолчанию aggfunc разные: pivot_table - np.mean, crosstab - len.

Параметр margins_name только в pivot_table.

В pivot_table вы можете использовать Grouper для index и columns ключевых слов.


Я думаю, что если вам нужна просто таблица частот, crosstab функции лучше.

+0

Но, похоже, вы также можете использовать 'aggfunc' для функции кросс-таблицы. –

11

Основное различие между двумя: pivot_table ожидает, что ваши входные данные уже будут DataFrame; вы передаете DataFrame на pivot_table и укажите index/columns/values, передав имена столбцов в виде строк. С cross_tab вам не обязательно нужно, чтобы DataFrame проходил, поскольку вы просто передаете объекты, похожие на массив, для index/columns/values.

Глядя на source code для crosstab, она по существу принимает массив подобных объектов вы проходите, создает DataFrame, затем вызывает pivot_table соответствующие меры.

В общем случае используйте pivot_table, если у вас уже есть DataFrame, поэтому у вас нет дополнительных накладных расходов для создания того же DataFrame. Если вы начинаете с объектов, подобных массиву, и связаны только с поворотными данными, используйте crosstab. В большинстве случаев я не думаю, что действительно будет иметь значение, какую функцию вы решите использовать.

Смежные вопросы