我有一个带有几个分类列的Pandas(0.23.4)DataFrame。
df = pd.DataFrame(np.random.choice([True, False, np.nan], (6,4)), columns = ['a','b','c','d'])
a b c d
0 NaN 1.0 NaN NaN
1 NaN 1.0 NaN 0.0
2 1.0 NaN 1.0 NaN
3 0.0 NaN 0.0 1.0
4 NaN 1.0 NaN NaN
5 NaN 1.0 0.0 1.0
我有两组感兴趣的列:
cross_cols = ['a', 'b']
type_cols = ['c', 'd']
我想获取每个cross_col变量与每个type_col变量的计数的交叉表({a
与c
和d
,以及b
与{{1 }}和c
)(NaN除外)并排显示。理想的结果是:
d
请注意,我对 c d
0.0 1.0 All 0.0 1.0 All
a 0.0 0 0 0 1 1 2
1.0 2 1 3 1 0 1
All 2 1 3 2 1 3
b 0.0 0 0 0 0 1 1
1.0 2 1 3 2 0 2
All 2 1 3 2 1 3
和a
或b
和c
的不同组合的计数不感兴趣,这是通过更改d
的{{1}}和index
参数。
当前我正在使用以下代码:
columns
它给出以下结果:
pd.crosstab
结果很好,但是代码很慢而且有点难看。我怀疑有一种更快,更Pythonic的方法。有没有可以完成任务的单个函数调用,还是另一个更快的解决方案?