[英]Slice MultiIndex pandas DataFrame by position
我目前正在嘗試切片MuliIndex DataFrame,它有三個級別的位置。 我正在使用熊貓19.1
Level0 Level1 Level2 Value
03-00368 A Item111 6.9
03-00368 A Item333 19.2
03-00368 B Item111 9.7
03-00368 B Item222 17.4
04-00176 C Item110 17.4
04-00176 C Item111 9.7
04-00246 D Item46 12.5
04-00246 D Item66 5.6
04-00246 D Item99 11.2
04-00247 E Item23 12.5
04-00247 E Item24 5.6
04-00247 E Item111 11.2
04-00247 F Item23 7.9
04-00247 F Item24 9.7
04-00247 F Item111 12.5
04-00247 G Item46 11.2
04-00247 G Item66 9.7
04-00247 G Item999 9.7
04-00247 H Item23 11.2
04-00247 H Item94 7.9
04-00247 H Item111 11.2
04-00247 I Item46 5.6
04-00247 I Item66 12.5
04-00247 I Item888 11.2
04-00353 J Item66 12.5
04-00353 J Item99 12.5
04-00354 K Item43 12.5
04-00354 K Item94 12.5
04-00355 L Item54 50
04-00355 L Item99 50
目前我可以實現:
df.loc[(slice('03-00368', '04-00361'), slice(None), slice(None)), :]
但實際上我不知道標簽是什么。 我只想選擇前十級0,所以我嘗試了這個(還有很多類似的東西):
>>> df.iloc[(slice(0, 10), slice(None), slice(None)), :]
TypeError: unorderable types: int() >= NoneType()
最終目標是限制顯示的最終行數, 而不會破壞Level0索引
>>>df.iloc[(0,1,), :]
Level0 Level1 Level2 Value
03-00368 A Item111 6.9
03-00368 A Item333 19.2
請注意,它只返回前兩行,我希望結果如下:
Level0 Level1 Level2 Value
03-00368 A Item111 6.9
03-00368 A Item333 19.2
03-00368 B Item111 9.7
03-00368 B Item222 17.4
04-00176 C Item110 17.4
04-00176 C Item111 9.7
有一些hacky方法來完成這個,但我發布是因為我想知道我做錯了什么,或者為什么我不能指望能夠以這種方式切片MultiIndexes。
方法1
groupby
+ head
df.groupby(level=0).head(10)
方法2
不必要的冗長
IndexSlice
df.sort_index().loc[pd.IndexSlice[df.index.levels[0][:10], :, :], :]
方法3
loc
df.loc[df.index.levels[0][:10].tolist()]
你可以組合級別並以這種方式取得前兩名
df.groupby(level=0).head(2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.