pandas.crosstab#
- pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)[源代码][源代码]#
计算两个(或更多)因素的简单交叉表。
默认情况下,计算因子的频率表,除非传递了一个值数组和一个聚合函数。
- 参数:
- 索引类数组, 序列, 或数组/序列列表
在行中分组的值。
- 列类数组, 序列, 或数组/序列列表
在列中分组的值。
- 值类数组, 可选
根据因子聚合的值数组。需要指定 aggfunc。
- rownamessequence, 默认 None
如果传递了,必须匹配传递的行数组的数量。
- colnamessequence, 默认 None
如果传递了,必须匹配传递的列数组的数量。
- aggfunc函数, 可选
如果指定,则需要 values 也一并指定。
- 边距布尔值, 默认为 False
添加行/列边距(小计)。
- margins_namestr, 默认 ‘所有’
当 margins 为 True 时,包含总计的行/列的名称。
- dropnabool, 默认为 True
不要包含所有条目都是 NaN 的列。
- normalizebool, {‘all’, ‘index’, ‘columns’}, 或 {0,1}, 默认 False
通过将所有值除以值的总和来进行归一化。
如果传递 ‘all’ 或 True,将对所有值进行归一化。
如果传递 ‘index’ 将按行归一化。
如果传递 ‘columns’,将对每一列进行归一化。
如果 margins 是 True,还将规范化边距值。
- 返回:
- DataFrame
数据的交叉表。
参见
DataFrame.pivot
基于列值重塑数据。
pivot_table
创建一个数据透视表作为 DataFrame。
备注
传递的任何 Series 将使用它们的 name 属性,除非指定了交叉表的行或列名称。
任何包含分类数据输入的交叉表将**全部**包含其所有类别,即使实际数据中不包含某个特定类别的实例。
如果没有重叠的索引,将返回一个空的 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