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