在多索引数据框中查找条目数最少的索引对

Find index pair with fewest number of entries in Multiindex data frame

给定一个具有 3(或更多)级别索引的 pandas 数据框。 例如:

             foo1 foo2 ...
L1  L2  L3
A   a   1    ...  ...
        2    ...  ...
    b   3    ...  ...
B   a   2    ...  ...
        2    ...  ...
        1    ...  ...
C   a   5    ...  ...
        3    ...  ...
    c   0    ...  ...
        9    ...  ...

我想找到条目数最少的一对 L1 & L2,即上面示例中的 (A,b),因为它只有一个条目:(A,b,3)

我的想法是对 L1L2 执行某种聚合,但我认为您无法使其在索引上运行。当然,我可以访问索引值,然后遍历它们以计算条目数,但我觉得有更多 pandas-ish 和更优雅的解决方案。

使用groupby+size你可以得到每组的行数:

df.groupby(level=['L1','L2']).size()

输出:

L1  L2
A   a     2
    b     1
B   a     3
C   a     2
    c     2

如果加上idxmin,可以得到行数最少的组:

df.groupby(level=['L1','L2']).size().idxmin()

输出:('A', 'b')