Pandas交叉表与Pandas pivot_表有何不同?
pandas.crosstab和pandas pivot表似乎提供了完全相同的功能。有什么不同吗?如果使用的是Pandas交叉表与Pandas pivot_表有何不同?,pandas,numpy,scipy,pivot-table,crosstab,Pandas,Numpy,Scipy,Pivot Table,Crosstab,pandas.crosstab和pandas pivot表似乎提供了完全相同的功能。有什么不同吗?如果使用的是aggfunc=len和fill\u 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) 编辑:还有更多区别: 默认值aggfunc不同:-np.mean,-len 参数m
aggfunc=len
和fill\u 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)
编辑:还有更多区别:
默认值aggfunc
不同:-np.mean
,-len
参数margins\u name
仅在pivot\u表中
在pivot\u表中
您可以使用Grouper
作为索引
和列
关键字
我认为如果您只需要频率表,
交叉表
功能更好。两者之间的主要区别在于透视表
希望您的输入数据已经是一个数据帧;将数据帧传递给pivot\u表
,并通过将列名作为字符串传递来指定索引
/列
/值
。使用交叉选项卡
,您不必输入数据帧,因为您只需为索引
/列
/值传递类似数组的对象即可
查看for交叉表
,它本质上是获取您传递的类似数组的对象,创建一个数据帧,然后根据需要调用pivot\u表
通常,如果您已经有一个数据帧,请使用pivot\u table
,这样您就不会有再次创建相同数据帧的额外开销。如果您从类似数组的对象开始,并且只关心数据透视,请使用交叉表。在大多数情况下,我不认为您决定使用哪个函数会有什么区别。不幸的是,pivot\u表
没有normalize
参数
在交叉表
中,normalize
参数通过将每个单元格除以单元格的总和来计算百分比,如下所述:
normalize='index'
将每个单元格除以其行的总和
normalize='columns'
将每个单元格除以其列的总和
normalize=True
将每个单元格除以表中所有单元格的总和
但是,对于交叉表函数,您似乎也可以使用aggfunc
。pivot\u表具有更大的“分析”灵活性,例如填充NA值、添加小计等,但绝对要以更大的开销为代价,如上所述。关于开销,则正好相反(如果有任何性能差异的话),因为交叉表
首先创建了一个数据帧,然后。我对几个选项进行了计时,结果发现pivot_table比交叉表慢一个数量级,甚至比简单但笨拙的groupby方法慢一个数量级,