pandas.crosstab

pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, dropna=True, normalize=False)[source]

计算两个(或更多)因子的简单交叉列表。默认情况下计算因子的频率表,除非传递值数组和聚合函数

参数:

索引:数组类,序列或数组/系列列表

要在行中分组的值

:数组类,系列或数组/系列列表

要在列中分组的值

:array-like,可选

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

aggfunc:function,可选

如果指定,还需要指定

rownames:sequence,default无

如果传递,则必须匹配传递的行数组数

colnames:sequence,default无

如果传递,必须匹配传递的列数组数

边距:boolean,默认为False

添加行/列边距(小计)

dropna:boolean,default True

不要包括条目都是NaN的列

normalize:boolean,{'all','index','columns'}或{0,1},默认为False

将所有值除以值的总和进行归一化。

  • 如果传递“all”或True,将对所有值进行标准化。
  • 如果传递的“索引”将规范化每行。
  • 如果传递的“列”将标准化每个列。
  • 如果边距为True,也将标准化边距值。

版本0.18.1中的新功能。

返回:

交叉表:DataFrame

笔记

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

任何传入的包含分类数据的输入都将包含在交叉列表中的类别的全部,即使实际数据不包含特定类别的任何实例。

在没有重叠索引的情况下,将返回一个空DataFrame。

例子

>>> a
array([foo, foo, foo, foo, bar, bar,
       bar, bar, foo, foo, foo], dtype=object)
>>> b
array([one, one, one, two, one, one,
       one, two, two, two, one], dtype=object)
>>> c
array([dull, dull, shiny, dull, dull, shiny,
       shiny, dull, shiny, shiny, shiny], dtype=object)
>>> 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
>>> foo = pd.Categorical(['a', 'b'], categories=['a', 'b', 'c'])
>>> bar = pd.Categorical(['d', 'e'], categories=['d', 'e', 'f'])
>>> crosstab(foo, bar)  # 'c' and 'f' are not represented in the data,
                        # but they still will be counted in the output
col_0  d  e  f
row_0
a      1  0  0
b      0  1  0
c      0  0  0
Scroll To Top