pandas.crosstab#
- pandas.crosstab(index, columns, values=None, rownames=None, colnames=None, aggfunc=None, margins=False, margins_name='All', dropna=True, normalize=False)[源代码]#
计算两个(或更多)因素的简单交叉表。默认情况下,除非传递了值数组和聚合函数,否则会计算因子的频率表。
- 参数
- index类似阵列、系列或阵列/系列列表
行中分组依据的值。
- columns类似阵列、系列或阵列/系列列表
列中分组依据的值。
- values类似阵列,可选
要根据系数聚合的值数组。要求 aggfunc 被指定。
- rownames序列,默认为无
如果传递,则必须与传递的行数组数目匹配。
- colnames序列,默认为无
如果传递,则必须与传递的列数组数目匹配。
- aggfunc函数,可选
如果指定,则需要 values 也是指定的。
- margins布尔值,默认为False
添加行/列边距(小计)。
- margins_name字符串,默认为‘All’
当边距为True时将包含总计的行/列的名称。
- dropna布尔值,默认为True
不包括条目全部为NaN的列。
- normalizeBool,{‘All’,‘index’,‘Columns’}或{0,1},默认为FALSE
通过将所有值除以值的和来进行规格化。
如果传递的是“all”或 True ,将对所有值进行正常化。
如果传递,‘index’将在每一行上正常化。
如果传递,‘Columns’将在每一列上正常化。
如果边距为 True ,还将使保证金值正常化。
- 退货
- DataFrame
数据的交叉表。
参见
DataFrame.pivot
根据列值重塑数据。
pivot_table
将数据透视表创建为DataFrame。
注意事项
除非指定了交叉表的行名或列名,否则传递的任何系列都将使用其名称属性。
传递的任何包含分类数据的输入都将具有 all 即使实际数据不包含某一特定类别的任何实例,也应包括在交叉表中所包括的类别。
如果没有重叠的索引,将返回一个空的DataFrame。
参考文献 the user guide 查看更多示例。
示例
>>> 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