Python pandas.crosstab中缺少数据

Python pandas.crosstab中缺少数据,python,pandas,Python,Pandas,我正在和熊猫做一些交叉表: a = np.array(['foo', 'foo', 'foo', 'bar', 'bar', 'foo', 'foo'], dtype=object) b = np.array(['one', 'one', 'two', 'one', 'two', 'two', 'two'], dtype=object) c = np.array(['dull', 'dull', 'dull', 'dull', 'dull', 'shiny', 'shiny'], dtype=o

我正在和熊猫做一些交叉表:

a = np.array(['foo', 'foo', 'foo', 'bar', 'bar', 'foo', 'foo'], dtype=object)
b = np.array(['one', 'one', 'two', 'one', 'two', 'two', 'two'], dtype=object)
c = np.array(['dull', 'dull', 'dull', 'dull', 'dull', 'shiny', 'shiny'], dtype=object)

pd.crosstab(a, [b, c], rownames=['a'], colnames=['b', 'c'])

b     one   two       
c    dull  dull  shiny
a                     
bar     1     1      0
foo     2     1      2
但我真正想要的是:

b     one        two       
c    dull  shiny dull  shiny
a                     
bar     1     0    1      0
foo     2     0    1      2
我通过添加新列并将级别设置为新的多重索引找到了解决方法,但这似乎很难


有没有办法将多索引传递给交叉表函数以预定义输出列?

我认为没有办法做到这一点,源代码中的
交叉表
调用
pivot\u table
,它似乎也不提供这一点。我把它作为一个问题提了出来

黑客解决方法(可能与您已经使用的方法相同,也可能不同……):


如果
product
速度太慢,下面是它的一部分。

交叉表函数有一个名为dropna的参数,默认情况下该参数设置为True。此参数定义是否应显示空列(例如一个闪亮的列)

我试着这样调用函数:

pd.crosstab(a, [b, c], rownames=['a'], colnames=['b', 'c'], dropna = False)
这就是我得到的:

b     one          two       
c    dull  shiny  dull  shiny
a                            
bar     1      0     1      0
foo     2      0     1      2

希望这仍然有帮助。

我将此示例包括在中,因为我认为有一个问题是,文档中描述了一些错误。我基本上也是这样做的。我想我的问题是在熊猫身上使用的方法。交叉表函数执行预期的操作。所以下一个问题是:如何按多索引对数据进行分组?我的意思是,不仅要将键传递给groupby,还要将键和值传递给groupby。@norecces just uses pivot_表。(你应该作为一个单独的问题提问,我认为你可以将映射和列结合起来。)“似乎很难”是一个非常轻描淡写的说法:)
b     one          two       
c    dull  shiny  dull  shiny
a                            
bar     1      0     1      0
foo     2      0     1      2