Python3 -- pandas 两列的交叉表

Python3 -- pandas crosstab for two columns

我正在尝试使用本地数据帧中的 pd.crosstab 进行应急 table。想象一下,我们向 2 个不同组中的 3 个人询问了他们是否喜欢冰淇淋的问题,这是数据框中的结果:

group1    | group2    
------------------
yes       | no    
no        | maybe 
yes       | no    

我希望应急 table 看起来像这样:

      | group1     | group2
----------------------------
yes   | 2          | 0
no    | 1          | 2
maybe | 0          | 1 

我已经尝试过 pandas 并且显然引用了许多不同的资源,包括文档和其他帖子,但无法弄清楚这一点。有人有什么想法吗?谢谢!

Pandas 有一个 crosstab function that solve this; first you have to melt 数据框:

box = df.melt()
pd.crosstab(box.value, box.variable)

variable    group1  group2
value       
maybe          0    1
no             1    2
yes            2    0

为了性能,groupby 可能会更快,即使它涉及更多的步骤:

box.groupby(["variable", "value"]).size().unstack("variable", fill_value=0)