在多索引数据框中查找条目数最少的索引对
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)
我的想法是对 L1
和 L2
执行某种聚合,但我认为您无法使其在索引上运行。当然,我可以访问索引值,然后遍历它们以计算条目数,但我觉得有更多 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')
给定一个具有 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)
我的想法是对 L1
和 L2
执行某种聚合,但我认为您无法使其在索引上运行。当然,我可以访问索引值,然后遍历它们以计算条目数,但我觉得有更多 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')