Pandas多级索引计算出现次数

6

我有一个带有多层索引的Pandas DataFrame

(Index col 1) (Index col 2) (Data col 1) ....
A               a            word1
                a            word2
                b            word3
B               a            word4
                c            word5

现在我想统计所有具有相同Index列1和Index列2组合的行数。我已经尝试了df.value_counts(),但出现了错误“DataFrame没有value_counts()方法”。如果我使用df.count(),我只能为level=0或level=1计算,不能同时计算两者(即使我经常在stackoverflow上看到它使用列表作为level参数)。
期望输出: A a 2 A b 1 .. 等等
[编辑]: 好吧,@EdChum的评论解决了问题,但我仍然想知道为什么其他东西不起作用?具体而言:为什么value_counts似乎未定义,而它是最新Pandas的一部分?这与我使用Jupyter Notebook有关吗?还是这些事情在Pandas版本之间经常改变?

1
尝试使用df.groupby(level=[0,1]).size() - EdChum
@EdChum,搞定了,谢谢! - Celebrian
2个回答

10
你可以在感兴趣的索引上进行groupby操作,并调用size返回唯一值的计数:
In [4]:
df.groupby(level=[0,1]).size()

Out[4]:
(Index col 1)  (Index col 2)
A              a                2
               b                1
B              a                1
               c                1
dtype: int64

value_counts 是一个 Series 的方法,因此它不能用于 DataFrame,这就是为什么它没有起作用的原因。


Ipython/Jupyter?还是Spyder? - Mohammad Yusuf
@MohammadYusufGhazi,你对什么发表评论? - EdChum
In[4]和Out[4]标记。 - Mohammad Yusuf
ipython/jupyter - EdChum

1
你可以使用index.get_level_values将一个索引级别与另一列组合。
 grouped = df.groupby([df.index.get_level_values(0),'Num']).size()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接