Pandas crosstab在一维DataFrame上的错误

1 投票
1 回答
2641 浏览
提问于 2025-04-18 16:26

我正在尝试使用这个多重索引的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

撰写回答