【发布时间】:2021-09-21 03:09:37
【问题描述】:
为了一个有趣的项目,我生成了一个包含所有当前存在的口袋妖怪(916 个,不包括 Megas 或其他形式)的数据集,并收集了有关基本统计数据、能力和类型的数据。现在我想生成一个交叉表,显示每种类型组合的分布。当前对数据进行编码,使得第一和第二类型是单独的变量Type1 和Type2。这种格式适用于pd.crosstab(),假设类型的顺序不同,('Flying','Normal') 与('Normal','Flying') 不一样;但是,游戏没有做出这样的区分。我想生成反映这一点的频率表——基本上将pd.crosstab() 表沿对角线折叠成两半。
#### For data structured like...
In[1]: dfNatDex[dfNatDex['DexNum']<10]
Out[4]:
DexNum Name Type1 Type2
0 1.0 Bulbasaur grass poison
1 2.0 Ivysaur grass poison
2 3.0 Venusaur grass poison
3 4.0 Charmander fire fire
4 5.0 Charmeleon fire fire
5 6.0 Charizard fire flying
6 7.0 Squirtle water water
7 8.0 Wartortle water water
8 9.0 Blastoise water water
[10 rows x 16 columns]
#### I am getting...
In[2]: crosstab(dfNatDex['Type2'][...],dfNatDex['Type1'][...])
Out[2]:
Type1 flying normal water
Type2
flying 3 26 7
normal 0 69 0
water 1 1 67
#### I want to get...
Type1 flying normal water
Type2
flying 3 26 8
normal . 69 1
water . . 67
我的猜测是,如果我还没有找到用于此的 Pandas 函数,那么也许我可以通过矩阵运算来实现这一点。如果做不到这一点,我认为可能需要一个缓慢的迭代过程来实现这一点。
【问题讨论】:
标签: python python-3.x pandas categorical-data crosstab