pandas.crosstab #

熊猫。crosstab ( index , columns , values = None , rownames = None , colnames = None , aggfunc = None , margins = False , margins_name = 'All' , dropna = True , normalize = False ) [来源] #

计算两个(或更多)因素的简单交叉表。

默认情况下,除非传递值数组和聚合函数,否则计算因子的频率表。

参数
类似索引数组、系列或数组/系列列表

行中分组依据的值。

列类数组、系列或数组/系列列表

列中分组依据的值。

类似数组,可选

根据因素聚合的值数组。需要指定aggfunc 。

rownames序列,默认 None

如果通过,则必须匹配通过的行数组的数量。

colnames序列,默认 None

如果通过,则必须匹配通过的列数组的数量。

aggfunc函数,可选

如果指定,则还需要指定值。

margins bool, 默认 False

添加行/列边距(小计)。

margins_name str,默认“全部”

当边距为 True 时将包含总计的行/列的名称。

dropna bool,默认 True

请勿包含条目全部为 NaN 的列。

规范化bool、{'all'、'index'、'columns'} 或 {0,1},默认 False

通过将所有值除以值的总和来标准化。

  • 如果传递 'all' 或True,将对所有值进行标准化。

  • 如果传递“索引”,则会对每一行进行标准化。

  • 如果传递“列”,则会对每列进行标准化。

  • 如果 margins 为True,还将标准化边距值。

返回
数据框

数据的交叉制表。

也可以看看

DataFrame.pivot

根据列值重塑数据。

pivot_table

创建一个数据透视表作为 DataFrame。

笔记

除非指定了交叉表的行或列名称,否则传递的任何系列都将使用其名称属性。

即使实际数据不包含特定类别的任何实例,传递的任何包含类别数据的输入都将在交叉表中包含其所有类别

如果没有重叠索引,将返回一个空的 DataFrame。

请参阅用户指南以获取更多示例。

例子

>>> a = np.array(["foo", "foo", "foo", "foo", "bar", "bar",
...               "bar", "bar", "foo", "foo", "foo"], dtype=object)
>>> b = np.array(["one", "one", "one", "two", "one", "one",
...               "one", "two", "two", "two", "one"], dtype=object)
>>> c = np.array(["dull", "dull", "shiny", "dull", "dull", "shiny",
...               "shiny", "dull", "shiny", "shiny", "shiny"],
...              dtype=object)
>>> pd.crosstab(a, [b, c], rownames=['a'], colnames=['b', 'c'])
b   one        two
c   dull shiny dull shiny
a
bar    1     2    1     0
foo    2     2    1     2

这里 'c' 和 'f' 没有在数据中表示,也不会显示在输出中,因为 dropna 默认为 True。设置 dropna=False 以保留没有数据的类别。

>>> foo = pd.Categorical(['a', 'b'], categories=['a', 'b', 'c'])
>>> bar = pd.Categorical(['d', 'e'], categories=['d', 'e', 'f'])
>>> pd.crosstab(foo, bar)
col_0  d  e
row_0
a      1  0
b      0  1
>>> pd.crosstab(foo, bar, dropna=False)
col_0  d  e  f
row_0
a      1  0  0
b      0  1  0
c      0  0  0