Pandas crosstab在一维DataFrame上的错误
我正在尝试使用这个多重索引的DataFrame来计算组的频率:
In [1]: frame
Out[1]:
position values
idmajor idminor
22 2 6 A
4 1 7 B
11 1 7 C
23 1 7 B
1 1 8 C
9 8 C
4 1 8 C
1 8 C
这是我的代码和出现的错误:
In [2]: pd.crosstab(frame.position, frame.values)
Out[2]: Exception: Data must be 1-dimensional
这是我想要输出的结果:
Out[2]:
categories A B C
values
6 1 0 0
7 0 2 1
8 0 0 4
我正在阅读《Python数据分析》这本书,刚开始接触pandas
库。我很难找到能让我更好理解这个问题的答案或例子。任何建议都非常感谢!
补充说明:由于DataFrame的多重索引,我被异常信息误导了。这个多重索引的特性和异常信息没有关系。
1 个回答
3
在文档中,pd.DataFrame.values 是在 Python 的命名空间中被 pandas 保留的,所以我实际上是在引用我数据列的一个函数,而不是我以为的列标签!
使用点符号 pd.crosstab(frame.position, frame.values)
会返回一个错误 Exception: Data must be 1-dimensional
,而使用字典符号 pd.crosstab(frame['position'], frame['values'])
则能成功运行!
In [2]: pd.crosstab(frame['position'], frame['values'])
Out[2]:
categories A B C
values
6 1 0 0
7 0 2 1
8 0 0 4
为了避免将来再出现混淆,我的解决办法就是把我的数据框列名 values
改成 categories
。