Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/pandas/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas交叉表与Pandas pivot_表有何不同?_Pandas_Numpy_Scipy_Pivot Table_Crosstab - Fatal编程技术网

Pandas交叉表与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

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

参数
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方法慢一个数量级,