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